Ručna instalacija Semaphore-a
Sadržaj:
- Servisni korisnik
- Python3
- Ansible kolekcije i uloge
- Reverzni proksi
- Systemd servis
- Rešavanje problema
Ova dokumentacija detaljno opisuje kako da podesite Semaphore kada koristite sledeće metode instalacije:
Softverski paket Semaphore je samo deo celokupnog sistema potrebnog za uspešno pokretanje Ansible-a pomoću njega.
Python3 i Ansible izvršno okruženje su takođe veoma važni!
NAPOMENA: Postoje gotove Ansible Galaxy uloge koje obavljaju ovu logiku podešavanja umesto vas ili se mogu koristiti kao osnovni šablon za vašu sopstvenu Ansible ulogu!
Servisni korisnik
Semaphore ne mora da se pokreće kao korisnik root - i ne bi trebalo.
Prednosti korišćenja servisnog korisnika:
- Ima sopstvenu korisničku konfiguraciju
- Ima sopstveno okruženje
- Procesi se lako identifikuju
- Veća bezbednost sistema
Sistemskog korisnika možete kreirati ručno pomoću adduser ili pomoću modula ansible.builtin.user.
U ovoj dokumentaciji pretpostavljamo:
- kreirani servisni korisnik se zove
semaphore - podešena mu je ljuska
/bin/bash - njegov home direktorijum je
/home/semaphore
Rešavanje problema
Ako Ansible izvršavanje iz Semaphore-a ne uspeva - moraćete da rešavate problem u kontekstu servisnog korisnika.
Za to imate više opcija:
-
Prebacite celu sesiju ljuske u kontekst korisnika:
sudo su --login semaphore -
Pokrenite jednu komandu u kontekstu korisnika:
sudo --login -u semaphore <command>
Python3
Ansible je napisan u programskom jeziku Python3.
Zato je njegovo čisto podešavanje neophodno da bi Ansible ispravno radio.
Prvo - uverite se da su paketi python3 i python3-pip instalirani na vašem sistemu!
Potrebne Python module možete instalirati na više načina:
- Instaliranjem u kontekstu servisnog korisnika
- Instaliranjem u virtuelno okruženje namenjeno servisu
Zahtevi
U oba slučaja - preporučuje se korišćenje datoteke requirements.txt za navođenje modula koje treba instalirati.
Pretpostavićemo da se koristi datoteka /home/semaphore/requirements.txt.
Evo primera njenog sadržaja:
ansible
# for common jinja-filters
netaddr
jmespath
# for common modules
pywinrm
passlib
requests
docker
NAPOMENA: Ove zahteve bi trebalo povremeno i ažurirati!
Opcija za automatsko ažuriranje je prikazana i u primeru servisa ispod.
Moduli u korisničkom kontekstu
Ručno:
sudo --login -u semaphore python3 -m pip install --user --upgrade -r /home/semaphore/requirements.txt
Pomoću Ansible-a:
- name: Install requirements
ansible.builtin.pip:
requirements: '/home/semaphore/requirements.txt'
extra_args: '--user --upgrade'
become_user: 'semaphore'
Moduli u virtualenv-u
Pretpostavićemo da je virtualenv kreiran u /home/semaphore/venv
Uverite se da je virtuelno okruženje aktivirano unutar servisa! To je takođe prikazano u primeru servisa ispod.
Ručno:
sudo su --login semaphore
python3 -m pip install --user virtualenv
python3 -m venv /home/semaphore/venv
# activate the context of the virtual environment
source /home/semaphore/venv/bin/activate
# verify we are using python3 from inside the venv
which python3
> /home/semaphore/venv/bin/python3
python3 -m pip install --upgrade -r /home/semaphore/requirements.txt
# disable the context to the virtual environment
deactivate
Pomoću Ansible-a:
- name: Create virtual environment and install requirements into it
ansible.builtin.pip:
requirements: '/home/semaphore/requirements.txt'
virtualenv: '/home/semaphore/venv'
state: present # or 'latest' to upgrade the requirements
Rešavanje problema
Ako naiđete na probleme sa Python3 pri korišćenju virtuelnog okruženja, moraćete da uđete u njegov kontekst da biste ih rešili:
sudo su --login semaphore
source /home/semaphore/venv/bin/activate
# verify we are using python3 from inside the venv
which python3
> /home/semaphore/venv/bin/python3
# troubleshooting
deactivate
Ponekad se virtuelno okruženje pokvari i pri nadogradnji sistema. Ako se to desi, možete jednostavno ukloniti postojeće i kreirati ga ponovo.
Ansible kolekcije i uloge
Možda ćete želeti da unapred instalirate Ansible module i uloge, kako ne bi morali da se instaliraju pri svakom pokretanju zadatka!
Zahtevi
Preporučuje se korišćenje datoteke requirements.yml za navođenje modula koje treba instalirati.
Pretpostavićemo da se koristi datoteka /home/semaphore/requirements.yml.
Evo primera njenog sadržaja:
---
collections:
- 'namespace.collection'
# for common collections:
- 'community.general'
- 'ansible.posix'
- 'community.mysql'
- 'community.crypto'
roles:
- src: 'namespace.role'
Pogledajte i: Instaliranje kolekcija, Instaliranje uloga
NAPOMENA: Ove zahteve bi trebalo povremeno i ažurirati!
Opcija za automatsko ažuriranje je prikazana i u primeru servisa ispod.
Instalacija u korisničkom kontekstu
Ručno:
sudo su --login semaphore
ansible-galaxy collection install --upgrade -r /home/semaphore/requirements.yml
ansible-galaxy role install --force -r /home/semaphore/requirements.yml
Instalacija pri korišćenju virtualenv-a
Ručno:
sudo su --login semaphore
source /home/semaphore/venv/bin/activate
# verify we are using python3 from inside the venv
which python3
> /home/semaphore/venv/bin/python3
ansible-galaxy collection install --upgrade -r /home/semaphore/requirements.yml
ansible-galaxy role install --force -r /home/semaphore/requirements.yml
deactivate
Reverzni proksi
Pogledajte: Bezbednost - Šifrovana veza
Prošireni Systemd servis
Evo osnovnog šablona systemd servisa.
Dodatna podešavanja dodajte pod odgovarajući [PART]
Osnova
[Unit]
Description=Semaphore UI
Documentation=https://semaphoreui.com/docs
Wants=network-online.target
After=network-online.target
ConditionPathExists=/usr/bin/semaphore
ConditionPathExists=/etc/semaphore/config.json
[Service]
ExecStart=/usr/bin/semaphore server --config /etc/semaphore/config.json
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
RestartSec=10s
[Install]
WantedBy=multi-user.target
Servisni korisnik
[Service]
User=semaphore
Group=semaphore
Python moduli
U korisničkom kontekstu
[Service]
# to auto-upgrade python modules at service startup
ExecStartPre=/bin/bash -c 'python3 -m pip install --upgrade --user -r /home/semaphore/requirements.txt'
# so the executables are found
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/semaphore/.local/bin"
# set the correct python path. You can get the correct path with: python3 -c "import site; print(site.USER_SITE)"
Environment="PYTHONPATH=/home/semaphore/.local/lib/python3.10/site-packages"
U virtualenv-u
[Service]
# to auto-upgrade python modules at service startup
ExecStartPre=/bin/bash -c 'source /home/semaphore/venv/bin/activate \
&& python3 -m pip install --upgrade -r /home/semaphore/requirements.txt'
# REPLACE THE EXISTING 'ExecStart'
ExecStart=/bin/bash -c 'source /home/semaphore/venv/bin/activate \
&& /usr/bin/semaphore server --config /etc/semaphore/config.json'
Ansible kolekcije i uloge
Ako koristite Python3 u korisničkom kontekstu
[Service]
# to auto-upgrade ansible collections and roles at service startup
ExecStartPre=/bin/bash -c 'ansible-galaxy collection install --upgrade -r /home/semaphore/requirements.yml'
ExecStartPre=/bin/bash -c 'ansible-galaxy role install --force -r /home/semaphore/requirements.yml'
Ako koristite Python3 u virtualenv-u
# to auto-upgrade ansible collections and roles at service startup
ExecStartPre=/bin/bash -c 'source /home/semaphore/venv/bin/activate \
&& ansible-galaxy collection install --upgrade -r /home/semaphore/requirements.yml \
&& ansible-galaxy role install --force -r /home/semaphore/requirements.yml'
Drugi slučajevi upotrebe
Korišćenje lokalne MariaDB
[Unit]
Requires=mariadb.service
Korišćenje lokalnog Nginx-a
[Unit]
Wants=nginx.service
Slanje logova u syslog
[Service]
StandardOutput=journal
StandardError=journal
SyslogIdentifier=semaphore
Kompletni primeri
Python moduli u korisničkom kontekstu
[Unit]
Description=Semaphore UI
Documentation=https://semaphoreui.com/docs
Wants=network-online.target
After=network-online.target
ConditionPathExists=/usr/bin/semaphore
ConditionPathExists=/etc/semaphore/config.json
[Service]
User=semaphore
Group=semaphore
Restart=always
RestartSec=10s
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:~/.local/bin"
ExecStartPre=/bin/bash -c 'ansible-galaxy collection install --upgrade -r /home/semaphore/requirements.yml'
ExecStartPre=/bin/bash -c 'ansible-galaxy role install --force -r /home/semaphore/requirements.yml'
ExecStartPre=/bin/bash -c 'python3 -m pip install --upgrade --user -r /home/semaphore/requirements.txt'
ExecStart=/usr/bin/semaphore server --config /etc/semaphore/config.json
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
Python moduli u virtualenv-u
[Unit]
Description=Semaphore UI
Documentation=https://semaphoreui.com/docs
Wants=network-online.target
After=network-online.target
ConditionPathExists=/usr/bin/semaphore
ConditionPathExists=/etc/semaphore/config.json
[Service]
User=semaphore
Group=semaphore
Restart=always
RestartSec=10s
ExecStartPre=/bin/bash -c 'source /home/semaphore/venv/bin/activate \
&& python3 -m pip install --upgrade -r /home/semaphore/requirements.txt'
ExecStartPre=/bin/bash -c 'source /home/semaphore/venv/bin/activate \
&& ansible-galaxy collection install --upgrade -r /home/semaphore/requirements.yml \
&& ansible-galaxy role install --force -r /home/semaphore/requirements.yml'
ExecStart=/bin/bash -c 'source /home/semaphore/venv/bin/activate \
&& /usr/bin/semaphore server --config /etc/semaphore/config.json'
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
Ispravke
Ako imate podešen prilagođeni sistemski jezik - možete naići na probleme koji se rešavaju ažuriranjem odgovarajućih promenljivih okruženja:
[Service]
Environment=LANG="en_US.UTF-8"
Environment=LC_ALL="en_US.UTF-8"
Rešavanje problema
Ako dođe do problema pri izvršavanju zadatka, možda je u pitanju problem sa okruženjem u vašem podešavanju - a ne sa samim Semaphore-om!
Prođite kroz sledeće korake da proverite da li se problem javlja i van Semaphore-a:
-
Uđite u kontekst korisnika:
sudo su --login semaphore -
Uđite u kontekst virtualenv-a ako ga koristite:
source /home/semaphore/venv/bin/activate
# verify we are using python3 from inside the venv
which python3
> /home/semaphore/venv/bin/python3
# troubleshooting
deactivate -
Pokrenite Ansible playbook ručno
- Ako ne uspe => problem je u vašem okruženju
- Ako radi:
- Ponovo proverite svoju konfiguraciju unutar Semaphore-a
- Možda je problem u Semaphore-u