İlk olarak Bash Script kullanarak Ubuntu 20.04 sunucularımızın üçüne de default kurulumu gerçekleştireceğiz.

Github üzerinden dosyayı sunucumuza çekelim.

wget https://raw.githubusercontent.com/haiwen/seafile-server-installer/master/seafile-9.0_ubuntu

Bu yazıyı yazdığımda son sürüm 9.0.4 olarak görünüyor. Bu nedenle komutta 9.0.4 versiyonu yazmaktadır. Yeni sürüm çıktıkça siz de kurulumu buna göre değiştirebilirsiniz. Komutu terminalde çalıştırıyoruz.

sudo bash seafile-9.0_ubuntu 9.0.4
  This script installs the community/professional edition of the Seafile Server on a Ubuntu 18.04/20.04 64bit
  - Newest Seafile server version, MariaDB, Memcached, NGINX -
  -----------------------------------------------------------------

  This installer is meant to run on a freshly installed machine
  only. If you run it on a production server things can and
  probably will go terribly wrong and you will lose valuable
  data!

  For questions or suggestions please contact us at
  [email protected]

  -----------------------------------------------------------------

  Possible options:
  1 = Seafile Community (Free) Edition (CE)
  2 = Seafile Professional Edition (PRO)

1) CE
2) PRO
3) ABORT
Which Seafile version would you like to install? 

Free sürümünü kuracağız. 1 yazıp enterlıyoruz ve kurulum başlıyor. Kurulum bittikten sonra size admin bilgilerinizi gösterecektir.

  Your Seafile server is installed
  -----------------------------------------------------------------

  Server Address:      http://127.0.0.1

  Seafile Admin:       [email protected]
  Admin Password:      6Ghys!2s72asn!%s92aa9a

  Seafile Data Dir:    /opt/seafile/seafile-data

  Seafile DB Credentials:  Check /opt/seafile.my.cnf
  Root DB Credentials:     Check /root/.my.cnf

  This report is also saved to /opt/seafile/aio_seafile-server.log

Seafile MySQL kullanmaktadır. High Availabilty için MariaDB Galera kurulumu yapacağız. Bunu daha önceki yazımda anlattım. Aşağıdan ulaşabilirsiniz.

Ayrıca dosya senkronizasyonu için bir araca ihtiyacımız var. Bu durumda ben GlusterFS kullandım. Kurulumu için aşağıdaki bağlantıyı ziyaret edebilirsiniz.

GlusterFS ve MariaDB Galera kurulumları tamamladıktan sonra, Seafile’ın 3 sunucuda da eşzamanlı aynı veriyle çalışması için bazı ayarları güncelleyeceğiz.

Öncelikle seafile servisini 3 sunucumuza da ekleyelim.

nano /etc/systemd/system/seafile.service
[Unit]
Description=Seafile
# add mysql.service or postgresql.service depending on your database to the line below
After=network.target

[Service]
Type=forking
ExecStart=/opt/seafile/seafile-server-latest/seafile.sh start
ExecStop=/opt/seafile/seafile-server-latest/seafile.sh stop
LimitNOFILE=infinity
User=seafile
Group=seafile

[Install]
WantedBy=multi-user.target

Daha sonra seahub servisini 3 sunucumuza da ekleyelim.

nano /etc/systemd/system/seahub.service
[Unit]
Description=Seafile hub
After=network.target seafile.service

[Service]
Type=forking
# change start to start-fastcgi if you want to run fastcgi
ExecStart=/opt/seafile/seafile-server-latest/seahub.sh start
ExecStop=/opt/seafile/seafile-server-latest/seahub.sh stop
User=seafile
Group=seafile

[Install]
WantedBy=multi-user.target

3 sunucumuzda da servisleri enable edelim.

sudo systemctl enable seafile.service
sudo systemctl enable seahub.service

Eğer seafile DB kullanıcısı için değişiklik yaptıysanız veya sildiyseniz ilgili config dosyalarını aşağıdaki komut ile düzenleyin.

nano /opt/seafile/conf/ccnet.conf
nano /opt/seafile/conf/seafile.conf
nano /opt/seafile/conf/seahub_settings.py

Ardından servisleri yeniden başlatın.

service seahub restart && service seafile restart

Son olarak seafile dizinimizi GlusterFS üzerinden mount edeceğiz. Reboot atıldıktan sonra MariaDB Galera ve GlusterFS sorunsuz çalışması için cron ekleyeceğiz.

#Server -1

nano /etc/crontab
@reboot root mount -t glusterfs cdn1:/shared_volume /opt/seafile/seafile-data >/dev/null 2>&1
@reboot root sed -i "/safe_to_bootstrap/s/0/1/" /var/lib/mysql/grastate.dat; galera_new_cluster >/dev/null 2>&1 

#Server -2

nano /etc/crontab
@reboot root mount -t glusterfs cdn2:/shared_volume /opt/seafile/seafile-data >/dev/null 2>&1
@reboot root sed -i "/safe_to_bootstrap/s/0/1/" /var/lib/mysql/grastate.dat; service mysqld restart >/dev/null 2>&1 

#Server -3

nano /etc/crontab
@reboot root mount -t glusterfs cdn3:/shared_volume /opt/seafile/seafile-data >/dev/null 2>&1
@reboot root sed -i "/safe_to_bootstrap/s/0/1/" /var/lib/mysql/grastate.dat; service mysqld restart >/dev/null 2>&1 

Son olarak sunucularımızı sırasıyla yeniden başlatalım. Hepsini aynı anda rebootlamayın. MariaDB Galera Cluster bazen sorun çıkartabilir. Örneğin ana sunucu ayakta değilse diğer 2 replica mysqld servisini başlatamayacaktır. Önce ilk sunucu, sonra diğerlerini reboot edin.

reboot

Web arayüzü HTTPS olarak çalıştırmak isterseniz nginx conf’u aşağıdaki gibi düzenleyebilirsiniz. Domain ve SSL kısımlarını düzeltmeyi unutmayın.

nano /etc/nginx/sites-available/seafile.conf
log_format seafileformat '$http_x_forwarded_for $remote_addr [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $upstream_response_time';

server {
    listen       80;
    server_name  server.example.com;
    rewrite ^ https://$http_host$request_uri? permanent;    # Forced redirect from HTTP to HTTPS

    server_tokens off;      # Prevents the Nginx version from being displayed in the HTTP response header
}


server {
    listen 443 ssl;
    ssl_certificate /ssl/sertifika.tr.crt;
    ssl_certificate_key /ssl/private.key;
    server_name server.example.com;
    server_tokens off;

    proxy_set_header X-Forwarded-For $remote_addr;

    location / {
         proxy_pass         http://127.0.0.1:8000;
         proxy_set_header   Host $host;
         proxy_set_header   X-Real-IP $remote_addr;
         proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header   X-Forwarded-Host $server_name;
         proxy_set_header   X-Forwarded-Proto $scheme;
         proxy_read_timeout  1200s;

         # used for view/edit office file via Office Online Server
         client_max_body_size 0;

         access_log      /var/log/nginx/seahub.access.log seafileformat;
         error_log       /var/log/nginx/seahub.error.log;
    }

    location /seafhttp {
         rewrite ^/seafhttp(.*)$ $1 break;
         proxy_pass http://127.0.0.1:8082;
         client_max_body_size 0;
         proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_connect_timeout  36000s;
         proxy_read_timeout  36000s;

        access_log      /var/log/nginx/seafhttp.access.log seafileformat;
        error_log       /var/log/nginx/seafhttp.error.log;
    }
    location /media {
        root /opt/seafile/seafile-server-latest/seahub;
    }
    location /seafdav {
        proxy_pass         http://127.0.0.1:8080/seafdav;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_read_timeout  1200s;

        client_max_body_size 0;

        access_log      /var/log/nginx/seafdav.access.log seafileformat;
        error_log       /var/log/nginx/seafdav.error.log;
    }
}
nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
service nginx restart

API

Günün sonunda oluşturduğunuz CDN ağına dosya yüklemek veya görüntülemek için kullanacağınız dokümanlar bu bağlantıdadır.