Menjalankan DEVPI Server di FreeBSD dengan Paket Python PyPI Private

· 2 min read

devpi-server Sebagai proxy caching untuk PyPI. Server DevPI mampu menyajikan indeks caching yang konsisten untuk pypi.python.org serta indeks overlay

DevPI merupakan server yang ditulis dengan bahasa Python, sehingga sangat kompatibel dengan PyPI. Karena DevPI ditulis dengan bahasa Python, Anda dapat menjalankan DevPI secara lokal atau dapat diinstal pada server pribadi seperti FreeBSD. Kesederhanaan dan kemudahan penggunaan merupakan salah satu keunggulan DevPI, sehingga wajar saja jika proses instalasi DevPI tidak terlalu sulit.

DevPi dirilis dengan tiga paket Python, yaitu:

1. devpi-server
Sebagai proxy caching untuk PyPI. Server DevPI mampu menyajikan indeks caching yang konsisten untuk pypi.python.org serta indeks overlay lokal bergaya github. Setelah Anda memiliki paket pypi DevPI, paket tersebut tidak akan pernah diubah dan tidak akan pernah diubah.

2. devpi-web
Salah satu plugin devpi-server yang menyediakan antarmuka web dan pencarian. Dengan DevPI Web, Anda dapat mencari direktori paket lokal dengan mudah.

3. devpi-client
Salah satu fitur baris perintah DevPI dengan sub perintah untuk membuat pengguna, menggunakan indeks, mengunggah dan menginstal dari indeks, serta perintah "uji" untuk menjalankan tox. Klien DevPI sangat diperlukan dalam kasus penggunaan yang lebih esoteris.


python DevPI server di freebsd


Dalam tutorial ini kita akan membuat mirror dengan PyPI, salah satu platform Python untuk mengambil dan mengunduh paket-paket python. Mirror Pypi sangat berguna jika Anda ingin memiliki salinan PyPI untuk penggunaan pribadi atau internal. Mirroring situs web mengacu pada konsep mereplikasi atau menyalin situs web atau node jaringan apa pun dengan tujuan.
  • Pastikan ketersediaan situs asli.
  • Menyediakan cadangan situs asli secara real-time.
  • Mengurangi lalu lintas jaringan.
  • Meningkatkan kecepatan akses.
Untuk melakukan pekerjaan ini, kita akan menggunakan paket bernama DevPi. Menginstal dan menjalankan DevPI sangatlah mudah, di FreeBSD Anda harus menjalankan lingkungan virtual Python.

1. Membuat Python Venv

Seperti yang kita ketahui, FreeBSD memiliki banyak sekali paket Python di repositorinya. Untuk menghindari perbedaan versi dan sebagainya, pengguna FreeBSD diharuskan untuk menginstal paket Python di lingkungan virtual. Hal ini bertujuan untuk mengisolasi setiap paket yang diinstal agar tidak terhubung dengan paket Python lainnya. Berikut ini akan kami jelaskan cara menginstal lingkungan virtual Python (venv) di FreeBSD.

Create directory Python venv
root@ns3:~ # mkdir -p /var/venv
root@ns3:~ # cd /var/venv
root@ns3:/var/venv # python -m venv devpi
Setelah itu, Anda mengaktifkan lingkungan virtual Python.

Activate Python venv
root@ns3:/var/venv # cd devpi
root@ns3:/var/venv/devpi # source bin/activate.csh
(devpi) root@ns3:/var/venv/devpi #
Dengan menjalankan perintah di atas, berarti Anda telah mengaktifkan Python venv. Kemudian Anda menjalankan perintah upgrade pip.

Activate Python venv
(devpi) root@ns3:/var/venv/devpi # pip install --upgrade pip

2. Cara Instal DevPI Server

Di bagian ini kita akan mulai memasang dan menjalankan server DevPI untuk menyajikan cache mirror PyPI yang diperbarui secara otomatis dan efisien di server FreeBSD Anda. Server Devpi menggunakan SQLite untuk menyimpan datanya, di FreeBSD Anda tidak perlu memasang SQLite karena sudah terpasang secara otomatis oleh FreeBSD. Oke, mari kita mulai memasang devpi-server, devpi-client, dan devpi-web.

Install DevPI
(devpi) root@ns3:/var/venv/devpi # pip install -q -U devpi-server devpi-web devpi-client
Setelah itu, periksa versi DevPI server yang Anda gunakan dengan perintah berikut.

Check version
(devpi) root@ns3:/var/venv/devpi # devpi-server --version
6.10.0
Langkah berikutnya adalah menginisialisasi server devpi.

Initialize Devpi server
(devpi) root@ns3:/var/venv/devpi # devpi-init --serverdir /root/.devpi/server

3. Buat pip.conf

Pada FreeBSD, berkas konfigurasi pip untuk server DevPI terletak di lingkungan virtual Python, yaitu "/var/venv/devpi". Pada setiap sistem operasi yang berbeda, lokasi berkas pip.conf berbeda-beda. Berkas pip.conf dapat digunakan untuk menentukan variabel konfigurasi dan lingkungan yang dijalankan pip, seperti:
  • opsi baris perintah.
  • variabel lingkungan.
  • berkas konfigurasi
pip memiliki 3 "level" file konfigurasi:
  • global: berkas konfigurasi seluruh sistem, dibagikan ke seluruh pengguna.
  • pengguna: berkas konfigurasi per pengguna.
  • situs: berkas konfigurasi per lingkungan; yaitu per-virtualenv.
Selain itu, pada server DevPI, file pip.conf dapat digunakan untuk menghindari pengetikan ulang URL indeks dengan pip atau easy-install. Anda dapat merasakan manfaat file pip.conf saat menginstal aplikasi dengan perintah pip.

Di bawah ini kami berikan contoh skrip konfigurasi file pip.conf.

Create pip.conf
(devpi) root@ns3:/var/venv/devpi # touch pip.conf
(devpi) root@ns3:/var/venv/devpi # ee pip.conf
[global]
index-url = http://192.168.5.2:3141/root/pypi/+simple/

[search]
index = http://192.168.5.2:3141/root/pypi/

[install]
Trusted-host = 192.168.5.2
Setelah itu buat file .pydistutils.cfg untuk mengonfigurasi easy_install. Tambahkan skrip di bawah ini ke file .pydistutils.cfg.

Create .pydistutils.cfg
(devpi) root@ns3:/var/venv/devpi # touch .pydistutils.cfg
(devpi) root@ns3:/var/venv/devpi # ee .pydistutils.cfg
[easy_install]
index_url = http://192.168.5.2:3141/root/pypi/+simple/

4. Aktifkan Devpi Server dengan Python Supervisor

Karena server DevPI ditulis dalam Python dan berjalan dalam lingkungan virtual Python, untuk mengaktifkan daemon server DevPI agar berjalan di latar belakang FreeBSD, kami menggunakan pengawas Python. Jika Anda masih berada di lingkungan virtual Python, keluar dari Python Venv, lalu instal pengawas Python.

Exit Python Venv and Install py39-supervisor
(devpi) root@ns3:/var/venv/devpi # deactivate
root@ns3:/var/venv/devpi # pkg install py39-supervisor
Setelah itu, buat skrip rc.d agar pengawas Python dapat berjalan secara otomatis. Pada berkas /ec/rc.conf, tambahkan skrip di bawah ini.

Script rc.conf (enable py39-supervisor)
root@ns3:/var/venv/devpi # ee /etc/rc.conf
supervisord_enable="YES"
supervisord_config="/usr/local/etc/supervisord.conf"
supervisord_user="root"
Kemudian, buka file supervisord.conf, hapus semua skrip dan ganti dengan skrip di bawah ini.

/usr/local/etc
root@ns3:/var/venv/devpi # cd /usr/local/etc
root@ns3:/usr/local/etc # ee supervisord.conf
[unix_http_server]
file=/var/run/supervisor/supervisor.sock   ; the path to the socket file
;chmod=0700                 ; socket file mode (default 0700)
;chown=nobody:nogroup       ; socket file uid:gid owner
;username=user              ; default is no username (open server)
;password=123               ; default is no password (open server)

;[inet_http_server]         ; inet (TCP) server disabled by default
;port=127.0.0.1:9001        ; ip_address:port specifier, *:port for all iface
;username=user              ; default is no username (open server)
;password=123               ; default is no password (open server)

[supervisord]
logfile=/var/log/supervisord.log ; main log file; default $CWD/supervisord.log
logfile_maxbytes=50MB        ; max main logfile bytes b4 rotation; default 50MB
logfile_backups=10           ; # of main logfile backups; 0 means none, default 10
loglevel=info                ; log level; default info; others: debug,warn,trace
pidfile=/var/run/supervisor/supervisord.pid ; supervisord pidfile; default supervisord.pid
nodaemon=false               ; start in foreground if true; default false
silent=false                 ; no logs to stdout if true; default false
minfds=1024                  ; min. avail startup file descriptors; default 1024
minprocs=200                 ; min. avail process descriptors;default 200
;umask=022                   ; process file creation umask; default 022
;user=supervisord            ; setuid to this UNIX account at startup; recommended if root
;identifier=supervisor       ; supervisord identifier, default is 'supervisor'
;directory=/tmp              ; default is not to cd during start
;nocleanup=true              ; don't clean up tempfiles at start; default false
;childlogdir=/tmp            ; 'AUTO' child log dir, default $TEMP
;environment=KEY="value"     ; key value pairs to add to environment
;strip_ansi=false            ; strip ansi escape codes in logs; def. false

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///var/run/supervisor/supervisor.sock ; use a unix:// URL  for a unix socket
;serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket
;username=chris              ; should be same as in [*_http_server] if set
;password=123                ; should be same as in [*_http_server] if set
;prompt=mysupervisor         ; cmd line prompt (default "supervisor")
;history_file=~/.sc_history  ; use readline history if available

[program:devpi]
command=/usr/local/bin/devpi-server  --port 3141 --host 192.168.5.2 --serverdir /root/.devpi/server              ; the program (relative uses PATH, can take args)
;process_name=%(program_name)s ; process_name expr (default %(program_name)s)
;numprocs=1                    ; number of processes copies to start (def 1)
directory=/root/.devpi                ; directory to cwd to before exec (def no cwd)
;umask=022                     ; umask for process (default None)
;priority=999                  ; the relative start priority (default 999)
autostart=true                ; start at supervisord start (default: true)
;startsecs=1                   ; # of secs prog must stay up to be running (def. 1)
startretries=3                ; max # of serial start failures when starting (default 3)
autorestart=unexpected        ; when to restart if exited after running (def: unexpected)
;exitcodes=0                   ; 'expected' exit codes used with autorestart (default 0)
;stopsignal=QUIT               ; signal used to kill process (default TERM)
;stopwaitsecs=10               ; max num secs to wait b4 SIGKILL (default 10)
stopasgroup=true             ; send stop signal to the UNIX process group (default false)
killasgroup=true             ; SIGKILL the UNIX process group (def false)
user=root                   ; setuid to this UNIX account to run the program
redirect_stderr=true          ; redirect proc stderr to stdout (default false)
;stdout_logfile=/var/venv/devpi/supervisord.log        ; stdout log path, NONE for none; default AUTO
;stdout_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)
;stdout_logfile_backups=10     ; # of stdout logfile backups (0 means none, default 10)
;stdout_capture_maxbytes=1MB   ; number of bytes in 'capturemode' (default 0)
;stdout_events_enabled=false   ; emit events on stdout writes (default false)
;stdout_syslog=false           ; send stdout to syslog with process name (default false)
;stderr_logfile=/a/path        ; stderr log path, NONE for none; default AUTO
;stderr_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)
;stderr_logfile_backups=10     ; # of stderr logfile backups (0 means none, default 10)
;stderr_capture_maxbytes=1MB   ; number of bytes in 'capturemode' (default 0)
;stderr_events_enabled=false   ; emit events on stderr writes (default false)
;stderr_syslog=false           ; send stderr to syslog with process name (default false)
;environment=A="1",B="2"       ; process environment additions (def no adds)
;serverurl=AUTO                ; override serverurl computation (childutils)

;[eventlistener:theeventlistenername]
;command=/bin/eventlistener    ; the program (relative uses PATH, can take args)
;process_name=%(program_name)s ; process_name expr (default %(program_name)s)
;numprocs=1                    ; number of processes copies to start (def 1)
;events=EVENT                  ; event notif. types to subscribe to (req'd)
;buffer_size=10                ; event buffer queue size (default 10)
;directory=/tmp                ; directory to cwd to before exec (def no cwd)
;umask=022                     ; umask for process (default None)
;priority=-1                   ; the relative start priority (default -1)
;autostart=true                ; start at supervisord start (default: true)
;startsecs=1                   ; # of secs prog must stay up to be running (def. 1)
;startretries=3                ; max # of serial start failures when starting (default 3)
;autorestart=unexpected        ; autorestart if exited after running (def: unexpected)
;exitcodes=0                   ; 'expected' exit codes used with autorestart (default 0)
;stopsignal=QUIT               ; signal used to kill process (default TERM)
;stopwaitsecs=10               ; max num secs to wait b4 SIGKILL (default 10)
;stopasgroup=false             ; send stop signal to the UNIX process group (default false)
;killasgroup=false             ; SIGKILL the UNIX process group (def false)
;user=chrism                   ; setuid to this UNIX account to run the program
;redirect_stderr=false         ; redirect_stderr=true is not allowed for eventlisteners
;stdout_logfile=/a/path        ; stdout log path, NONE for none; default AUTO
;stdout_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)
;stdout_logfile_backups=10     ; # of stdout logfile backups (0 means none, default 10)
;stdout_events_enabled=false   ; emit events on stdout writes (default false)
;stdout_syslog=false           ; send stdout to syslog with process name (default false)
;stderr_logfile=/a/path        ; stderr log path, NONE for none; default AUTO
;stderr_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)
;stderr_logfile_backups=10     ; # of stderr logfile backups (0 means none, default 10)
;stderr_events_enabled=false   ; emit events on stderr writes (default false)
;stderr_syslog=false           ; send stderr to syslog with process name (default false)
;environment=A="1",B="2"       ; process environment additions
;serverurl=AUTO                ; override serverurl computation (childutils)

;[group:thegroupname]
;programs=progname1,progname2  ; each refers to 'x' in [program:x] definitions
;priority=999                  ; the relative start priority (default 999)

; The [include] section can just contain the "files" setting.  This
; setting can list multiple files (separated by whitespace or
; newlines).  It can also contain wildcards.  The filenames are
; interpreted as relative to this file.  Included files *cannot*
; include files themselves.

;[include]
;files = /var/venv/devpi/gen-config/supervisor-devpi.conf
Aktifkan pengawas Python dengan menjalankan perintah di bawah ini.

Restart Python supervisor
root@ns3:/usr/local/etc # service supervisord restart
Stopping supervisord.
Waiting for PIDS: 965.
Starting supervisord.

5. Manajemen Pengguna Klien DevPI

Setelah Anda mengaktifkan server DevPI, langkah selanjutnya adalah membuat pengguna dan kata sandi untuk terhubung ke server DevPI. Langkah ini sangat penting karena akan menjaga jaringan server DevPI Anda. Ikuti panduan di bawah ini untuk membuat pengguna dan kata sandi klien DevPI.

Enbale Python Venv and Connect the DevPI client to the DevPI server
root@ns3:~ # cd /usr/local/etc
root@ns3:/usr/local/etc # cd /var/venv/devpi
root@ns3:/var/venv/devpi # source bin/activate.csh
(devpi) root@ns3:/var/venv/devpi # devpi use -l http://192.168.5.2:3141
Perintah di atas digunakan untuk mengaktifkan Python Venv dan perintah "devpi use -l" untuk menghubungkan klien ke server. Setelah klien terhubung ke server, buat file json, lihat contoh di bawah ini.

Create "/root/.devpi/client/current.json" file
(devpi) root@ns3:/var/venv/devpi # touch /root/.devpi/client/current.json
(devpi) root@ns3:/var/venv/devpi # ee /root/.devpi/client/current.json
{
  "features": [
    "server-keyvalue-parsing"
  ],
  "login": "http://192.168.5.2:3141/+login"
}

a. Ubah kata sandi root

Kata sandi root dibuat secara otomatis saat server DevPI diinstal. Demi alasan keamanan, ubah kata sandi root.

Change the root password
(devpi) root@ns3:/var/venv/devpi # devpi login root --password=''
(devpi) root@ns3:/var/venv/devpi # devpi user -m root password=router1234
Perintah devpi login root --password='' digunakan saat pertama kali menginstal server DevPI. Karena password pengguna root setelah selesai menginstal server DevPI, defaultnya kosong: ''

Setelah mengganti password root, Anda harus login ke root dengan password yang Anda buat, yaitu "router1234". Sekarang jalankan perintah login ke root.

Login to root
(devpi) root@ns3:/var/venv/devpi # devpi login root
password for user root at http://192.168.5.2:3141/: router1234
logged in 'root', credentials valid for 10.00 hours

b. Buat Pengguna

Untuk membatasi pengguna server DevPI, kita akan membuat pengguna yang dapat mengakses server DevPI.

Create new user
(devpi) root@ns3:/var/venv/devpi # devpi user -c john email=datainchi@gmail.com password=johndoe123
user created: john
Perintah di atas digunakan untuk membuat,
Pengguna: john
Kata sandi: johndoe123

Coba sekarang untuk masuk dengan pengguna john.

Login with user john
(devpi) root@ns3:/var/venv/devpi # devpi login john
password for user john at http://192.168.5.2:3141/: johndoe123
logged in 'john', credentials valid for 10.00 hours

6. Menggunakan pip di DevPI Server

Di bagian ini, kita akan menggunakan perintah pip pada server DevPI. Baik easy_install maupun keduanya memiliki opsi -i untuk menentukan url server indeks. Kita akan menunjukkan penggunaan perintah pip yang kita arahkan ke penginstal pada indeks root/pypi khusus, yang dilayani oleh server devpi secara default. Oke, sekarang mari kita instal paket simplejson sebagai cache pengujian kita. Kita akan masuk dengan pengguna root.

Install simplejson package
(devpi) root@ns3:/var/venv/devpi # devpi login root
(devpi) root@ns3:/var/venv/devpi # pip install -i http://192.168.5.2:3141/root/pypi/+simple/ simplejson
Looking in indexes: http://192.168.5.2:3141/root/pypi/+simple/
Collecting simplejson
  Downloading http://192.168.5.2:3141/root/pypi/%2Bf/bce/df4cae0d47839/simplejson-3.19.2-py3-none-any.whl (56 kB)
     ???????????????????????????????????????? 57.0/57.0 kB 1.2 MB/s eta 0:00:00
Kami akan memberikan contoh lagi, pada contoh di bawah ini kami login dengan pengguna john, dan kami akan menginstal aplikasi panda.

Install panda package with user john
(devpi) root@ns3:/var/venv/devpi # devpi login john
(devpi) root@ns3:/var/venv/devpi # pip install --trusted-host 192.168.5.2 -i http://192.168.5.2:3141/root/pypi panda
Looking in indexes: http://192.168.5.2:3141/root/pypi
Collecting panda
  Downloading http://192.168.5.2:3141/root/pypi/%2Bf/f21/3b848f09268b3/panda-0.3.1.tar.gz (5.8 kB)
Devpi Server adalah sistem manajemen paket Python yang tangguh dan fleksibel, yang digunakan untuk menginstal perangkat lunak. Dengan DevPI Server, Anda dapat menyederhanakan distribusi dan manajemen perangkat lunak yang ada dalam Python. Meskipun masih ada kelemahan dan kekurangan, server Devpi tetap menjadi alat yang andal dan efisien untuk mengelola, mendistribusikan, dan menyebarkan paket perangkat lunak Python. Kami harap artikel ini memberi Anda informasi yang mendalam dan menyeluruh tentang cara menginstal server Devpi di FreeBSD.
Subscribe on LinkedIn Menjalankan DEVPI Server di FreeBSD dengan Paket Python PyPI Private

Enclosures Link: Menjalankan DEVPI Server di FreeBSD dengan Paket Python PyPI Private

Silahkan Berkomentar, Kakak...! Bunda...!

Posting Komentar