mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-05-27 10:44:33 +00:00
nextcloud: Connect to mysql using socket instead of TCP
- This eliminates the need to reconfigure mysql. Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org> Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
This commit is contained in:
parent
96035c2e2d
commit
fba3d6339b
@ -89,13 +89,6 @@ class NextcloudApp(app_module.App):
|
|||||||
urls=['https://{host}/nextcloud/login'])
|
urls=['https://{host}/nextcloud/login'])
|
||||||
self.add(webserver)
|
self.add(webserver)
|
||||||
|
|
||||||
daemon = Daemon('daemon-nextcloud', 'nextcloud-freedombox')
|
|
||||||
self.add(daemon)
|
|
||||||
|
|
||||||
daemon = Daemon('daemon-nextcloud-timer',
|
|
||||||
'nextcloud-cron-freedombox.timer')
|
|
||||||
self.add(daemon)
|
|
||||||
|
|
||||||
daemon = SharedDaemon('shared-daemon-podman-auto-update',
|
daemon = SharedDaemon('shared-daemon-podman-auto-update',
|
||||||
'podman-auto-update.timer')
|
'podman-auto-update.timer')
|
||||||
self.add(daemon)
|
self.add(daemon)
|
||||||
@ -107,6 +100,13 @@ class NextcloudApp(app_module.App):
|
|||||||
daemon = SharedDaemon('shared-daemon-nextcloud-mysql', 'mysql')
|
daemon = SharedDaemon('shared-daemon-nextcloud-mysql', 'mysql')
|
||||||
self.add(daemon)
|
self.add(daemon)
|
||||||
|
|
||||||
|
daemon = Daemon('daemon-nextcloud', 'nextcloud-freedombox')
|
||||||
|
self.add(daemon)
|
||||||
|
|
||||||
|
daemon = Daemon('daemon-nextcloud-timer',
|
||||||
|
'nextcloud-cron-freedombox.timer')
|
||||||
|
self.add(daemon)
|
||||||
|
|
||||||
backup_restore = NextcloudBackupRestore('backup-restore-nextcloud',
|
backup_restore = NextcloudBackupRestore('backup-restore-nextcloud',
|
||||||
**manifest.backup)
|
**manifest.backup)
|
||||||
self.add(backup_restore)
|
self.add(backup_restore)
|
||||||
|
|||||||
@ -28,8 +28,6 @@ GUI_ADMIN = 'nextcloud-admin'
|
|||||||
|
|
||||||
_volume_path = pathlib.Path(
|
_volume_path = pathlib.Path(
|
||||||
'/var/lib/containers/storage/volumes/') / VOLUME_NAME
|
'/var/lib/containers/storage/volumes/') / VOLUME_NAME
|
||||||
_socket_config_file = pathlib.Path('/etc/mysql/mariadb.conf.d/'
|
|
||||||
'99-freedombox.cnf')
|
|
||||||
_systemd_location = pathlib.Path('/etc/systemd/system/')
|
_systemd_location = pathlib.Path('/etc/systemd/system/')
|
||||||
_cron_service_file = _systemd_location / 'nextcloud-cron-freedombox.service'
|
_cron_service_file = _systemd_location / 'nextcloud-cron-freedombox.service'
|
||||||
_cron_timer_file = _systemd_location / 'nextcloud-cron-freedombox.timer'
|
_cron_timer_file = _systemd_location / 'nextcloud-cron-freedombox.timer'
|
||||||
@ -46,7 +44,7 @@ def setup():
|
|||||||
"""Setup Nextcloud configuration."""
|
"""Setup Nextcloud configuration."""
|
||||||
database_password = _generate_secret_key(16)
|
database_password = _generate_secret_key(16)
|
||||||
administrator_password = _generate_secret_key(16)
|
administrator_password = _generate_secret_key(16)
|
||||||
_configure_db_socket()
|
|
||||||
_create_database(database_password)
|
_create_database(database_password)
|
||||||
action_utils.podman_run(
|
action_utils.podman_run(
|
||||||
network_name=NETWORK_NAME, subnet='172.16.16.0/24',
|
network_name=NETWORK_NAME, subnet='172.16.16.0/24',
|
||||||
@ -54,6 +52,7 @@ def setup():
|
|||||||
container_ip=CONTAINER_IP, volume_name=VOLUME_NAME,
|
container_ip=CONTAINER_IP, volume_name=VOLUME_NAME,
|
||||||
container_name=CONTAINER_NAME, image_name=IMAGE_NAME,
|
container_name=CONTAINER_NAME, image_name=IMAGE_NAME,
|
||||||
extra_run_options=[
|
extra_run_options=[
|
||||||
|
'--volume=/run/mysqld/mysqld.sock:/run/mysqld/mysqld.sock',
|
||||||
f'--env=TRUSTED_PROXIES={BRIDGE_IP}',
|
f'--env=TRUSTED_PROXIES={BRIDGE_IP}',
|
||||||
'--env=OVERWRITEWEBROOT=/nextcloud'
|
'--env=OVERWRITEWEBROOT=/nextcloud'
|
||||||
])
|
])
|
||||||
@ -161,16 +160,6 @@ def _configure_firewall(action, interface_name):
|
|||||||
action_utils.service_restart('firewalld')
|
action_utils.service_restart('firewalld')
|
||||||
|
|
||||||
|
|
||||||
def _configure_db_socket():
|
|
||||||
file_content = f'''## This file is automatically generated by FreedomBox
|
|
||||||
## Enable database to create a socket for podman's bridge network
|
|
||||||
[mysqld]
|
|
||||||
bind-address = {BRIDGE_IP}
|
|
||||||
'''
|
|
||||||
_socket_config_file.write_text(file_content, encoding='utf-8')
|
|
||||||
action_utils.service_restart('mariadb')
|
|
||||||
|
|
||||||
|
|
||||||
def _create_database(db_password):
|
def _create_database(db_password):
|
||||||
"""Create an empty MySQL database for Nextcloud."""
|
"""Create an empty MySQL database for Nextcloud."""
|
||||||
# SQL injection is avoided due to known input.
|
# SQL injection is avoided due to known input.
|
||||||
@ -189,7 +178,7 @@ def _create_database(db_password):
|
|||||||
def _set_db_privileges(db_password):
|
def _set_db_privileges(db_password):
|
||||||
"""Create user, set password and provide permissions on the database."""
|
"""Create user, set password and provide permissions on the database."""
|
||||||
query = f'''GRANT ALL PRIVILEGES ON {DB_NAME}.* TO
|
query = f'''GRANT ALL PRIVILEGES ON {DB_NAME}.* TO
|
||||||
'{DB_USER}'@'{CONTAINER_IP}'
|
'{DB_USER}'@'localhost'
|
||||||
IDENTIFIED BY'{db_password}';
|
IDENTIFIED BY'{db_password}';
|
||||||
FLUSH PRIVILEGES;
|
FLUSH PRIVILEGES;
|
||||||
'''
|
'''
|
||||||
@ -201,10 +190,11 @@ def _nextcloud_setup_wizard(db_password, admin_password):
|
|||||||
admin_data_dir = _volume_path / '_data/data' / GUI_ADMIN
|
admin_data_dir = _volume_path / '_data/data' / GUI_ADMIN
|
||||||
if not admin_data_dir.exists():
|
if not admin_data_dir.exists():
|
||||||
_run_occ('maintenance:install', '--database=mysql',
|
_run_occ('maintenance:install', '--database=mysql',
|
||||||
f'--database-name={DB_NAME}', f'--database-host={BRIDGE_IP}',
|
'--database-host=localhost:/run/mysqld/mysqld.sock',
|
||||||
'--database-port=3306', f'--database-user={DB_USER}',
|
f'--database-name={DB_NAME}', f'--database-user={DB_USER}',
|
||||||
f'--database-pass={db_password}', f'--admin-user={GUI_ADMIN}',
|
f'--database-pass={db_password}', f'--admin-user={GUI_ADMIN}',
|
||||||
f'--admin-pass={admin_password}')
|
f'--admin-pass={admin_password}')
|
||||||
|
|
||||||
# For the server to work properly, it's important to configure background
|
# For the server to work properly, it's important to configure background
|
||||||
# jobs correctly. Cron is the recommended setting.
|
# jobs correctly. Cron is the recommended setting.
|
||||||
_run_occ('background:cron')
|
_run_occ('background:cron')
|
||||||
@ -284,7 +274,6 @@ def uninstall():
|
|||||||
_bind_redis('127.0.0.1 -::1')
|
_bind_redis('127.0.0.1 -::1')
|
||||||
action_utils.service_restart('redis-server')
|
action_utils.service_restart('redis-server')
|
||||||
_drop_database()
|
_drop_database()
|
||||||
_remove_db_socket()
|
|
||||||
_configure_firewall(action='remove', interface_name=NETWORK_NAME)
|
_configure_firewall(action='remove', interface_name=NETWORK_NAME)
|
||||||
action_utils.podman_uninstall(container_name=CONTAINER_NAME,
|
action_utils.podman_uninstall(container_name=CONTAINER_NAME,
|
||||||
network_name=NETWORK_NAME,
|
network_name=NETWORK_NAME,
|
||||||
@ -294,16 +283,11 @@ def uninstall():
|
|||||||
path.unlink(missing_ok=True)
|
path.unlink(missing_ok=True)
|
||||||
|
|
||||||
|
|
||||||
def _remove_db_socket():
|
|
||||||
_socket_config_file.unlink(missing_ok=True)
|
|
||||||
action_utils.service_restart('mariadb')
|
|
||||||
|
|
||||||
|
|
||||||
def _drop_database():
|
def _drop_database():
|
||||||
"""Drop the mysql database that was created during install."""
|
"""Drop the mysql database that was created during install."""
|
||||||
with action_utils.service_ensure_running('mysql'):
|
with action_utils.service_ensure_running('mysql'):
|
||||||
query = f'''DROP DATABASE {DB_NAME};
|
query = f'''DROP DATABASE {DB_NAME};
|
||||||
DROP User '{DB_USER}'@'{CONTAINER_IP}';'''
|
DROP User '{DB_USER}'@'localhost';'''
|
||||||
subprocess.run(['mysql', '--user', 'root'], input=query.encode(),
|
subprocess.run(['mysql', '--user', 'root'], input=query.encode(),
|
||||||
check=True)
|
check=True)
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user