Ten obszerny przewodnik krok po kroku pomoże Ci zainstalować Microsoft SQL Server na systemie operacyjnym Debian 12. Przedstawimy dwie metody instalacji: bezpośrednio na systemie operacyjnym oraz w kontenerze Docker. Dodatkowo omówimy zarządzanie użytkownikami, konfigurację zapory sieciowej, aby zapewnić bezpieczeństwo Twojej bazy danych, a także pokażemy, jak zautomatyzować ten proces za pomocą **Ansible**. Dowiesz się również, dlaczego serwery **Windows VPS** mogą być doskonałym wyborem dla Twoich rozwiązań bazodanowych.
Spis Treści
- Wymagania Wstępne
- Aktualizacja Systemu
- Instalacja Ansible (na maszynie kontrolującej)
- Instalacja Dockera
- Instalacja SQL Server w Dockerze (Zalecane)
- Instalacja SQL Server Bezpośrednio na Debianie 12 (Alternatywna Metoda)
- Zarządzanie Użytkownikami SQL Server
- Konfiguracja Firewalla (UFW)
- 8. Automatyzacja z Ansible
- 9. Dlaczego warto wybrać Windows VPS dla SQL Server?
- 10. Podsumowanie
Wymagania Wstępne
- Świeża instalacja Debian 12 (Bookworm) na serwerze docelowym.
- Dostęp do konta z uprawnieniami
sudolub kontorootna serwerze docelowym. - Dedykowana **maszyna kontrolująca Ansible** (może to być Twoja lokalna stacja robocza lub osobny serwer), na której zostanie zainstalowany Ansible.
- Klucze SSH do uwierzytelniania między maszyną kontrolującą Ansible a serwerem docelowym (zalecane).
- Stabilne połączenie internetowe.
1. Aktualizacja Systemu
Zawsze zaczynaj od aktualizacji list pakietów i uaktualnienia istniejących pakietów do najnowszych wersji. To zapewnia, że masz najnowsze poprawki bezpieczeństwa i zależności.
sudo apt update
sudo apt upgrade -y
sudo apt dist-upgrade -y
sudo apt autoremove -y
2. Instalacja Ansible (na maszynie kontrolującej)
Ansible to narzędzie do automatyzacji, które pozwala zarządzać wieloma serwerami z jednej centralnej lokalizacji. Zainstaluj Ansible na swojej **maszynie kontrolującej**, nie na serwerze docelowym Debian 12.
sudo apt update
sudo apt install ansible -y
Sprawdź wersję Ansible, aby upewnić się, że instalacja przebiegła pomyślnie:
ansible --version
3. Instalacja Dockera
Instalacja SQL Server w Dockerze jest zalecaną metodą ze względu na jej izolację, przenośność i łatwość zarządzania. Jeśli planujesz instalację bezpośrednio na OS, możesz pominąć ten krok, ale i tak gorąco polecam Dockera.
Usuwanie Starych Wersji (jeśli istnieją)
Jeśli masz zainstalowane starsze wersje Dockera, zaleca się ich usunięcie przed kontynuowaniem:
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt remove $pkg; done
Instalacja Pakietów Wymaganych do Repozytorium Dockera
sudo apt update
sudo apt install ca-certificates curl gnupg -y
Dodawanie Oficjalnego Klucza GPG Dockera
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
Dodawanie Repozytorium Dockera
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Instalacja Dockera Engine
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
Weryfikacja Instalacji Dockera
Uruchom proste polecenie, aby upewnić się, że Docker działa poprawnie:
sudo docker run hello-world
Powinieneś zobaczyć komunikat powitalny.
Dodanie Użytkownika do Grupy Docker (opcjonalnie, ale zalecane)
Aby uniknąć konieczności używania sudo przed każdym poleceniem Dockera, dodaj swojego użytkownika do grupy docker:
sudo usermod -aG docker $USER
Po wykonaniu tego polecenia wyloguj się i zaloguj ponownie, aby zmiany weszły w życie.
4. Instalacja SQL Server w Dockerze (Zalecane)
Ta metoda jest preferowana, ponieważ zapewnia izolowane środowisko dla SQL Server, co ułatwia zarządzanie i unikanie konfliktów z innymi pakietami systemowymi.
4.1 Pobieranie Obrazu SQL Server
Najpierw pobierz oficjalny obraz Microsoft SQL Server z Docker Hub. Zalecam użycie wersji 2019 lub nowszej. W tym przykładzie użyjemy SQL Server 2022.
docker pull mcr.microsoft.com/mssql/server:2022-latest
4.2 Uruchomienie Kontenera SQL Server
Teraz uruchom kontener SQL Server. Musisz zaakceptować licencję (ACCEPT_EULA), ustawić hasło SA (SA_PASSWORD) i opcjonalnie zmapować port oraz nazwać kontener.
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=TwojeMegaSilneHaslo123!" \
-p 1433:1433 --name sql_server_container \
-d mcr.microsoft.com/mssql/server:2022-latest
-e "ACCEPT_EULA=Y": Akceptuje umowę licencyjną użytkownika końcowego. Bez tego kontener się nie uruchomi.-e "SA_PASSWORD=TwojeMegaSilneHaslo123!": Ustawia hasło dla konta administratora (SA). Zmień to na **bardzo silne i unikalne hasło**.-p 1433:1433: Mapuje port 1433 (domyślny port SQL Server) z kontenera na port 1433 na hoście. Jeśli port 1433 jest już zajęty na hoście, możesz wybrać inny (np.-p 1434:1433).--name sql_server_container: Przypisuje nazwę do kontenera, ułatwiając jego identyfikację.-d: Uruchamia kontener w tle (detached mode).mcr.microsoft.com/mssql/server:2022-latest: Obraz Dockera, którego używamy.
4.3 Połączenie z SQL Server w Dockerze
Po kilku chwilach kontener powinien być gotowy. Możesz sprawdzić jego status:
docker ps
Powinieneś zobaczyć swój kontener sql_server_container na liście z statusem „Up”.
Aby połączyć się z serwerem SQL, możesz użyć narzędzi takich jak Azure Data Studio, SQL Server Management Studio (SSMS) z innej maszyny lub narzędzi wiersza poleceń na Debianie.
Jeśli chcesz połączyć się z narzędzi wiersza poleceń na Debianie, musisz je zainstalować (patrz sekcja 5.4).
5. Instalacja SQL Server Bezpośrednio na Debianie 12 (Alternatywna Metoda)
Ta metoda instaluje SQL Server bezpośrednio w systemie operacyjnym. Jest bardziej skomplikowana i może prowadzić do potencjalnych konfliktów zależności, dlatego zazwyczaj zaleca się Docker.
5.1 Dodawanie Repozytorium Microsoft SQL Server
Najpierw musisz zaimportować klucz GPG repozytorium Microsoft SQL Server i dodać repozytorium do swoich źródeł APT.
sudo apt update
sudo apt install curl -y
curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
curl https://packages.microsoft.com/config/debian/12/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list
5.2 Instalacja Pakietów SQL Server
Po dodaniu repozytorium, zaktualizuj listy pakietów i zainstaluj SQL Server.
sudo apt update
sudo apt install mssql-server -y
5.3 Konfiguracja SQL Server
Po instalacji musisz uruchomić skrypt konfiguracyjny, aby ustawić hasło SA i wybrać edycję SQL Server (np. Developer, Express, Standard).
sudo /opt/mssql/bin/mssql-conf setup
Postępuj zgodnie z instrukcjami na ekranie:
- Wybierz edycję SQL Server. Dla celów testowych i deweloperskich, **Developer Edition** (opcja 2) jest bezpłatna i zalecana.
- Zaakceptuj warunki licencji (wpisz 'yes’).
- Ustaw silne hasło dla konta administratora SQL Server (SA). Pamiętaj o złożoności hasła!
Po zakończeniu konfiguracji, SQL Server zostanie uruchomiony automatycznie. Możesz sprawdzić jego status:
systemctl status mssql-server --no-pager
5.4 Instalacja Narzędzi Wiersza Poleceń SQL Server (sqlcmd i bcp)
Do zarządzania SQL Server z wiersza poleceń potrzebne są narzędzia sqlcmd i bcp. Dodaj repozytorium narzędzi i zainstaluj je.
curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
curl https://packages.microsoft.com/config/debian/12/prod.list | sudo tee /etc/apt/sources.list.d/mssql-tools.list
sudo apt update
sudo apt install mssql-tools unixodbc-dev -y
Aby narzędzia sqlcmd i bcp były dostępne w ścieżce systemowej, dodaj je do PATH:
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
Teraz możesz przetestować połączenie:
sqlcmd -S localhost -U SA -P 'TwojeMegaSilneHaslo123!'
Jeśli połączenie jest udane, zobaczysz prompt 1>. Możesz wpisać SELECT @@VERSION i GO, aby sprawdzić wersję SQL Server.
1> SELECT @@VERSION
2> GO
1> exit
6. Zarządzanie Użytkownikami SQL Server
Bezpieczeństwo bazy danych jest kluczowe. Zawsze unikaj używania konta SA do codziennych operacji. Zamiast tego, stwórz dedykowanych użytkowników z minimalnymi niezbędnymi uprawnieniami.
Połącz się z SQL Server za pomocą sqlcmd lub narzędzia GUI (np. Azure Data Studio/SSMS).
sqlcmd -S localhost -U SA -P 'TwojeMegaSilneHaslo123!'
6.1 Tworzenie Nowego Loginu (Użytkownika Serwera)
Login to konto na poziomie serwera, które umożliwia połączenie z instancją SQL Server.
1> CREATE LOGIN NowyUzytkownik WITH PASSWORD = 'BardzoSilneHasloDlaUzytkownika!@#', CHECK_POLICY = ON;
2> GO
- Zmień
NowyUzytkownikna wybraną nazwę loginu. - Zmień
BardzoSilneHasloDlaUzytkownika!@#na silne hasło. CHECK_POLICY = ONwymusza stosowanie zasad dotyczących haseł.
6.2 Tworzenie Użytkownika Bazy Danych i Przyznawanie Uprawnień
Po utworzeniu loginu, możesz utworzyć użytkownika w konkretnej bazie danych i przyznać mu uprawnienia do tej bazy.
Najpierw utwórz nową bazę danych (jeśli jej jeszcze nie masz) lub użyj istniejącej:
1> CREATE DATABASE MojaNowaBazaDanych;
2> GO
1> USE MojaNowaBazaDanych;
2> GO
Teraz utwórz użytkownika bazy danych, mapując go do wcześniej utworzonego loginu:
1> CREATE USER UzytkownikBazyDanych FOR LOGIN NowyUzytkownik;
2> GO
I przyznaj mu uprawnienia (np. pełne uprawnienia do bazy danych, jeśli to konieczne, ale zawsze stosuj zasadę najmniejszych uprawnień):
1> GRANT CONTROL ON DATABASE::MojaNowaBazaDanych TO UzytkownikBazyDanych;
2> GO
Jeśli chcesz bardziej szczegółowe uprawnienia (np. tylko SELECT na konkretnej tabeli):
1> GRANT SELECT ON TabelaTestowa TO UzytkownikBazyDanych;
2> GO
Aby wyjść z sqlcmd, wpisz exit:
1> exit
7. Konfiguracja Firewalla (UFW)
Zaporę sieciową jest kluczowym elementem bezpieczeństwa. Domyślnie Debian może mieć zainstalowany iptables, ale UFW (Uncomplicated Firewall) jest znacznie łatwiejszy w obsłudze.
7.1 Instalacja UFW
sudo apt update
sudo apt install ufw -y
7.2 Zezwolenie na ruch dla SQL Server
Domyślny port dla SQL Server to 1433. Musisz zezwolić na ruch na tym porcie, aby aplikacje klienckie mogły się połączyć.
sudo ufw allow 1433/tcp comment 'Allow SQL Server'
sudo ufw allow 1434/tcp).Zezwolenie na ruch SSH (bardzo ważne!)
Upewnij się, że zezwalasz na ruch SSH (domyślny port 22), aby uniknąć utraty dostępu do serwera po włączeniu firewalla.
sudo ufw allow ssh comment 'Allow SSH access'
Jeśli używasz niestandardowego portu SSH, zmień ssh na numer portu (np. sudo ufw allow 2222/tcp).
7.3 Włączenie UFW
Po skonfigurowaniu reguł, możesz włączyć firewall. Zostaniesz poproszony o potwierdzenie, ponieważ może to zakłócić istniejące połączenia SSH.
sudo ufw enable
Potwierdź, wpisując y.
Sprawdzenie statusu UFW
Aby sprawdzić, czy firewall działa i jakie ma reguły:
sudo ufw status verbose
8. Automatyzacja z Ansible
Ansible pozwala zautomatyzować wszystkie powyższe kroki, co jest niezwykle przydatne przy wdrażaniu na wielu serwerach lub do powtarzalnych instalacji.
8.1 Plik inwentaryzacji Ansible (inventory.ini)
Utwórz plik inventory.ini na swojej maszynie kontrolującej Ansible. Zastąp your_server_ip adresem IP lub nazwą hosta Twojego serwera Debian 12.
[webservers]
your_server_ip ansible_user=your_username ansible_become=yes
Pamiętaj, aby your_username to nazwa użytkownika, który ma uprawnienia sudo na serwerze docelowym.
8.2 Playbook Ansible dla instalacji SQL Server w Dockerze (install_mssql_docker.yml)
Ten playbook zainstaluje Dockera, a następnie uruchomi kontener SQL Server.
---
- name: Install SQL Server on Debian 12 using Docker
hosts: webservers
become: yes
vars:
mssql_sa_password: "TwojeMegaSilneHaslo123!" # Zmień na silne, unikalne hasło!
mssql_port: 1433
mssql_container_name: sql_server_container
mssql_image: mcr.microsoft.com/mssql/server:2022-latest
tasks:
- name: Update apt cache and upgrade system
ansible.builtin.apt:
update_cache: yes
upgrade: dist
autoclean: yes
autoremove: yes
- name: Install required packages for Docker
ansible.builtin.apt:
name: "{{ item }}"
state: present
loop:
- ca-certificates
- curl
- gnupg
- name: Add Docker GPG key
ansible.builtin.shell: |
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
args:
creates: /etc/apt/keyrings/docker.gpg
- name: Add Docker APT repository
ansible.builtin.shell: |
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
args:
creates: /etc/apt/sources.list.d/docker.list
- name: Install Docker Engine
ansible.builtin.apt:
name: "{{ item }}"
state: present
update_cache: yes
loop:
- docker-ce
- docker-ce-cli
- containerd.io
- docker-buildx-plugin
- docker-compose-plugin
- name: Start and enable Docker service
ansible.builtin.systemd:
name: docker
state: started
enabled: yes
- name: Pull SQL Server Docker image
community.docker.docker_image:
name: "{{ mssql_image }}"
source: pull
state: present
- name: Run SQL Server container
community.docker.docker_container:
name: "{{ mssql_container_name }}"
image: "{{ mssql_image }}"
state: started
restart_policy: always
published_ports:
- "{{ mssql_port }}:1433"
env:
ACCEPT_EULA: "Y"
SA_PASSWORD: "{{ mssql_sa_password }}"
register: sql_container_result
- name: Install UFW
ansible.builtin.apt:
name: ufw
state: present
- name: Allow SSH traffic
community.general.ufw:
rule: allow
port: "{{ ansible_ssh_port | default(22) }}" # Assuming default SSH port or custom
proto: tcp
comment: "Allow SSH access"
- name: Allow SQL Server traffic
community.general.ufw:
rule: allow
port: "{{ mssql_port }}"
proto: tcp
comment: "Allow SQL Server traffic"
- name: Enable UFW
community.general.ufw:
state: enabled
default_deny: yes # Deny incoming by default, allow outgoing
when: not ansible_check_mode
- name: Verify UFW status
ansible.builtin.command: ufw status verbose
register: ufw_status
changed_when: false
- name: Print UFW status
ansible.builtin.debug:
var: ufw_status.stdout_lines
- name: Display connection info for SQL Server
ansible.builtin.debug:
msg: "SQL Server container '{{ mssql_container_name }}' is running on port {{ mssql_port }} with SA password '{{ mssql_sa_password }}'."
8.3 Playbook Ansible dla instalacji SQL Server bezpośrednio na OS (install_mssql_direct.yml)
Ten playbook zainstaluje SQL Server bezpośrednio na systemie operacyjnym Debian.
---
- name: Install SQL Server on Debian 12 directly
hosts: webservers
become: yes
vars:
mssql_sa_password: "TwojeMegaSilneHaslo123!" # Zmień na silne, unikalne hasło!
mssql_edition: 2 # 1=Developer, 2=Express, 3=Web, 4=Standard, 5=Enterprise
mssql_port: 1433
tasks:
- name: Update apt cache and upgrade system
ansible.builtin.apt:
update_cache: yes
upgrade: dist
autoclean: yes
autoremove: yes
- name: Install curl
ansible.builtin.apt:
name: curl
state: present
- name: Add Microsoft GPG key for SQL Server
ansible.builtin.shell: |
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
args:
creates: /etc/apt/trusted.gpg.d/microsoft.gpg # Check if this path is correct for debian 12
warn: false
- name: Add Microsoft SQL Server APT repository
ansible.builtin.shell: |
curl https://packages.microsoft.com/config/debian/12/prod.list | tee /etc/apt/sources.list.d/mssql-release.list
args:
creates: /etc/apt/sources.list.d/mssql-release.list
- name: Install mssql-server
ansible.builtin.apt:
name: mssql-server
state: present
update_cache: yes
- name: Configure SQL Server
ansible.builtin.command: /opt/mssql/bin/mssql-conf setup
args:
stdin: |
{{ mssql_edition }}
yes
{{ mssql_sa_password }}
{{ mssql_sa_password }}
no_log: true # Prevent sensitive info from showing in logs
changed_when: true # Always mark as changed, as it's an interactive setup
- name: Ensure mssql-server service is running and enabled
ansible.builtin.systemd:
name: mssql-server
state: started
enabled: yes
- name: Add Microsoft GPG key for mssql-tools
ansible.builtin.shell: |
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
args:
creates: /etc/apt/trusted.gpg.d/microsoft.gpg # Check if this path is correct for debian 12
warn: false
- name: Add Microsoft SQL Tools APT repository
ansible.builtin.shell: |
curl https://packages.microsoft.com/config/debian/12/prod.list | tee /etc/apt/sources.list.d/mssql-tools.list
args:
creates: /etc/apt/sources.list.d/mssql-tools.list
- name: Install mssql-tools and unixodbc-dev
ansible.builtin.apt:
name: "{{ item }}"
state: present
update_cache: yes
loop:
- mssql-tools
- unixodbc-dev
- name: Add mssql-tools to PATH for all users (profile.d)
ansible.builtin.copy:
content: 'export PATH="$PATH:/opt/mssql-tools/bin"'
dest: /etc/profile.d/mssql-tools.sh
mode: '0644'
notify: Reload .bashrc for current user # This might not work immediately for active sessions
- name: Install UFW
ansible.builtin.apt:
name: ufw
state: present
- name: Allow SSH traffic
community.general.ufw:
rule: allow
port: "{{ ansible_ssh_port | default(22) }}"
proto: tcp
comment: "Allow SSH access"
- name: Allow SQL Server traffic
community.general.ufw:
rule: allow
port: "{{ mssql_port }}"
proto: tcp
comment: "Allow SQL Server traffic"
- name: Enable UFW
community.general.ufw:
state: enabled
default_deny: yes
when: not ansible_check_mode # Do not enable if in check mode
- name: Verify UFW status
ansible.builtin.command: ufw status verbose
register: ufw_status
changed_when: false
- name: Print UFW status
ansible.builtin.debug:
var: ufw_status.stdout_lines
handlers:
- name: Reload .bashrc for current user
ansible.builtin.shell: source ~/.bashrc
# This handler is mostly symbolic for active sessions.
# Users logging in later will get the updated PATH.
# For a fully automated setup, consider a full reboot if strictly necessary.
listen: "Reload .bashrc for current user"
8.4 Uruchamianie Playbooka Ansible
Z maszyny kontrolującej Ansible, przejdź do katalogu, w którym zapisałeś pliki inventory.ini i wybrany playbook (np. install_mssql_docker.yml).
Uruchom playbook za pomocą polecenia:
ansible-playbook -i inventory.ini install_mssql_docker.yml
lub dla instalacji bezpośredniej:
ansible-playbook -i inventory.ini install_mssql_direct.yml
Jeśli używasz hasła do klucza SSH lub hasła użytkownika do sudo, Ansible poprosi o nie. Możesz użyć opcji --ask-pass (-k) dla hasła SSH i --ask-become-pass (-K) dla hasła sudo.
ansible-playbook -i inventory.ini install_mssql_docker.yml -k -K
9. Dlaczego warto wybrać Windows VPS dla SQL Server?
Optymalna Platforma dla Microsoft SQL Server
Chociaż Microsoft SQL Server działa doskonale na Debianie i w Dockerze, środowisko Windows Server często oferuje natywną optymalizację i pełną integrację z ekosystemem Microsoft.
Wybierając **Windows VPS**, zyskujesz:
- **Pełną Kompatybilność:** Najlepsza wydajność i stabilność dla SQL Server dzięki natywnemu środowisku Windows.
- **Narzędzia Graficzne:** Łatwe zarządzanie bazą danych za pomocą SQL Server Management Studio (SSMS) i innych narzędzi GUI.
- **Integracja z Active Directory:** Bezproblemowa integracja z istniejącą infrastrukturą Windows.
- **Wsparcie Techniczne:** Dostęp do szerokiego ekosystemu wsparcia i dokumentacji Microsoft.
- **Elastyczność:** Możliwość skalowania zasobów VPS w zależności od Twoich potrzeb.
Zainwestuj w niezawodność i wydajność dla swoich baz danych. Sprawdź naszą ofertę **Windows VPS** i wybierz idealne rozwiązanie dla siebie!
10. Podsumowanie
Gratulacje! Pomyślnie zainstalowałeś Microsoft SQL Server na Debianie 12, korzystając z Docker lub instalacji bezpośredniej. Omówiliśmy zarządzanie użytkownikami, konfigurację zapory sieciowej (UFW) oraz co najważniejsze, zautomatyzowaliśmy ten proces za pomocą Ansible.
Automatyzacja z Ansible jest potężnym narzędziem, które oszczędza czas i zmniejsza ryzyko błędów ludzkich, zapewniając spójne wdrożenia w Twojej infrastrukturze. Pamiętaj o regularnych aktualizacjach, tworzeniu kopii zapasowych i stosowaniu silnych zasad bezpieczeństwa dla Twojej bazy danych. Niezależnie od wybranej platformy, dbaj o bezpieczeństwo i optymalizację swojego środowiska bazodanowego.
Dodaj komentarz