Migrating Seafile to a new Server

Hi there!

I’ve been struggling with this one for quite a while now and hopefully you guys can help me.
This is what I am trying to do:

Our company has a seafile Server hosted on the internet that we now want to migrate onto our own cluster. Unfortunately the hoster has no option of exporting a vmdk or something and VMware vSphere Converter won’t work either. So I figured why not just shutdown the seafile service, dump the database and rsync the complete seafile-data folder onto the new server.

The current hosted server:
Ubuntu 14.04.5 LTS
Seafile 6.3.4
Filesystem reiserfs
Installed to /seafile

What I have done so far:
-Installed a new server with Ubuntu 16.04.5 TLS.
-Installed MySQL Server
-Made a dump from the original databases and wrote them onto the new server.
-Copied everything from /seafile onto the new server, except for the seafile-data folder.
-Mounted an NFS-Share as /seafile/seafile-data. (The new seafile-data store will be located on a NAS for backup reasons.
-R-Synced the complete seafile-data folder onto the new server.
-Installed and configured nginx

Starting Seafile/Seahub:
root@seafile:/seafile/seafile-server-latest# ./seafile.sh start

[09/29/18 22:14:50] ../common/session.c(132): using config file /seafile/conf/ccnet.conf
Starting seafile server, please wait ...
Seafile server started

Done.
root@seafile:/seafile/seafile-server-latest# ./seahub.sh start

LC_ALL is not set in ENV, set to en_US.UTF-8
Starting seahub at port 8000 ...

Seahub is started

Done.

I can successfully start seafile/seahub/ngingx and am greeted by the seafile login page.
When I try to login I get the following error page at this URL (https://10.32.1.11/accounts/login/?next=/)
chrome_2018-09-29_22-25-57

I deleted all log files, restartet Seafile and Seahub and then tried to log in. After the failed login I immediately took a look at the log files. There is an error message in the seahub.log file, but I do not unterstand why.
Can anybody maybe help me out here?

seafile.log:

[09/29/18 21:59:51] http-server.c(173): fileserver: worker_threads = 10
[09/29/18 21:59:51] http-server.c(188): fileserver: fixed_block_size = 8388608
[09/29/18 21:59:51] http-server.c(203): fileserver: web_token_expire_time = 3600
[09/29/18 21:59:51] http-server.c(218): fileserver: max_indexing_threads = 1
[09/29/18 21:59:51] http-server.c(233): fileserver: max_index_processing_threads= 3
[09/29/2018 09:59:51 PM] …/common/mq-mgr.c(54): [mq client] mq cilent is started
[09/29/2018 09:59:52 PM] size-sched.c(96): Repo size compute queue size is 0
[09/29/2018 10:00:21 PM] Disconnected from daemon

ccnet.log:

[09/29/18 21:59:50] …/common/session.c(132): using config file /seafile/conf/ccnet.conf
[09/29/18 21:59:50] …/common/session.c(455): socket file exists, delete it anyway
[09/29/18 21:59:50] …/common/session.c(484): Listen on /seafile/ccnet/ccnet.sock for local clients
[09/29/18 21:59:50] …/common/session.c(290): Update pubinfo file
[09/29/18 21:59:51] …/common/session.c(398): Accepted a local client
[09/29/18 21:59:51] …/common/session.c(398): Accepted a local client
[09/29/18 21:59:51] …/common/session.c(398): Accepted a local client
[09/29/18 21:59:51] …/common/session.c(398): Accepted a local client
[09/29/18 21:59:53] …/common/session.c(398): Accepted a local client
[09/29/18 21:59:53] …/common/peer.c(943): Local peer down
[09/29/18 22:00:21] …/common/session.c(369): Exit at Sat Sep 29 22:00:21 2018

controller.log:

[09/29/18 21:59:50] seafile-controller.c(169): starting ccnet-server …
[09/29/18 21:59:50] seafile-controller.c(73): spawn_process: ccnet-server -F /seafile/conf -c /seafile/ccnet -f /seafile/logs/ccnet.log -d -P /seafile/pids/ccnet.pid
[09/29/18 21:59:50] seafile-controller.c(88): spawned ccnet-server, pid 1639
[09/29/18 21:59:51] seafile-controller.c(571): ccnet daemon connected.
[09/29/18 21:59:51] seafile-controller.c(201): starting seaf-server …
[09/29/18 21:59:51] seafile-controller.c(73): spawn_process: seaf-server -F /seafile/conf -c /seafile/ccnet -d /seafile/seafile-data -l /seafile/logs/seafile.log -P /seafile/pids/seaf-server.pid
[09/29/18 21:59:51] seafile-controller.c(88): spawned seaf-server, pid 1644
[09/29/18 21:59:51] seafile-controller.c(544): seafdav not enabled.
[09/29/18 22:00:21] seafile-controller.c(582): shutting down ccnet-server …

seahub.log:

2018-09-29 20:00:11,733 [ERROR] django.request:135 handle_uncaught_exception Internal Server Error: /accounts/login/
Traceback (most recent call last):
File “/seafile/seafile-server-6.3.4/seahub/thirdpart/django/core/handlers/exception.py”, line 41, in inner
response = get_response(request)
File “/seafile/seafile-server-6.3.4/seahub/thirdpart/django/core/handlers/base.py”, line 249, in _legacy_get_response
response = self._get_response(request)
File “/seafile/seafile-server-6.3.4/seahub/thirdpart/django/core/handlers/base.py”, line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File “/seafile/seafile-server-6.3.4/seahub/thirdpart/django/core/handlers/base.py”, line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File “/seafile/seafile-server-6.3.4/seahub/thirdpart/django/utils/decorators.py”, line 149, in _wrapped_view
response = view_func(request, *args, **kwargs)
File “/seafile/seafile-server-6.3.4/seahub/thirdpart/django/views/decorators/cache.py”, line 57, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File “/seafile/seafile-server-6.3.4/seahub/seahub/auth/views.py”, line 117, in login
if form.is_valid():
File “/seafile/seafile-server-6.3.4/seahub/thirdpart/django/forms/forms.py”, line 183, in is_valid
return self.is_bound and not self.errors
File “/seafile/seafile-server-6.3.4/seahub/thirdpart/django/forms/forms.py”, line 175, in errors
self.full_clean()
File “/seafile/seafile-server-6.3.4/seahub/thirdpart/django/forms/forms.py”, line 385, in full_clean
self._clean_form()
File “/seafile/seafile-server-6.3.4/seahub/thirdpart/django/forms/forms.py”, line 412, in _clean_form
cleaned_data = self.clean()
File “/seafile/seafile-server-6.3.4/seahub/seahub/auth/forms.py”, line 54, in clean
username = Profile.objects.convert_login_str_to_username(login)
File “/seafile/seafile-server-6.3.4/seahub/seahub/profile/models.py”, line 118, in convert_login_str_to_username
username = self.get_username_by_login_id(login_str)
File “/seafile/seafile-server-6.3.4/seahub/seahub/profile/models.py”, line 94, in get_username_by_login_id
return super(ProfileManager, self).get(login_id=login_id).user
File “/seafile/seafile-server-6.3.4/seahub/thirdpart/django/db/models/manager.py”, line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File “/seafile/seafile-server-6.3.4/seahub/thirdpart/django/db/models/query.py”, line 374, in get
num = len(clone)
File “/seafile/seafile-server-6.3.4/seahub/thirdpart/django/db/models/query.py”, line 232, in len
self._fetch_all()
File “/seafile/seafile-server-6.3.4/seahub/thirdpart/django/db/models/query.py”, line 1118, in _fetch_all
self._result_cache = list(self._iterable_class(self))
File “/seafile/seafile-server-6.3.4/seahub/thirdpart/django/db/models/query.py”, line 53, in iter
results = compiler.execute_sql(chunked_fetch=self.chunked_fetch)
File “/seafile/seafile-server-6.3.4/seahub/thirdpart/django/db/models/sql/compiler.py”, line 899, in execute_sql
raise original_exception
OperationalError: (1054, “Unknown column ‘profile_profile.list_in_address_book’ in ‘field list’”)

Why not setup a backup seafile server and sync everything accross that way? If your instance on the VM provider is still up that is.

https://manual.seafile.com/deploy_pro/real_time_backup.html

nginx config:

server {
listen 80;
server_name server.domain.local;
rewrite ^ https://$http_host$request_uri? permanent; # force redirect http to https
server_tokens off;
}
server
{
listen 443;
ssl on;
ssl_certificate /etc/nginx/ssl/X.crt;
ssl_certificate_key /etc/nginx/ssl/X.key;
server_name server.domain.local;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:5m;
# Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
ssl_dhparam /etc/nginx/dhparam.pem;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_ciphers
‘ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-SEED-SHA:DHE-RSA-CAMELLIA128-SHA:HIGH:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS’;
ssl_prefer_server_ciphers on;
proxy_set_header X-Forwarded-For $remote_addr;
add_header Strict-Transport-Security “max-age=31536000; includeSubDomains”;
server_tokens off;
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 https;
access_log /var/log/nginx/seahub.access.log;
error_log /var/log/nginx/seahub.error.log;
proxy_read_timeout 1200s;
client_max_body_size 0;
}
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;
proxy_send_timeout 36000s;
send_timeout 36000s;
}

    location /media {
                    root /seafile/seafile-server-latest/seahub;
}
# Fake Webroot for Let's encrypt
location '/.well-known/acme-challenge'
    {
            default_type "text/plain";
            root /var/www/html;
}

}

Am I mistaken or is this Real-Time-Backup only available for the Pro Edition?
We are running the community edition of seafile.

Sorry about that, did not realize you were on the community edition.

https://manual.seafile.com/maintain/backup_recovery.html

Try setting up a new server, make sure that’s running first then importing the DB and data back in.