Blog

  • Hello world!

    WordPress へようこそ。こちらは最初の投稿です。編集または削除し、コンテンツ作成を始めてください。

  • Setup Neovim on Manjaro Linux

    Install Neovim

    First of all, install neovim

    $ sudo pacman -S neovim

    Install Languages Providers

    Install Programing Languages

    $ sudo pacman -S ruby nodejs perl

    Install Python provider

    $ sudo pacman -S python-pynvim

    Install Ruby provider

    $ yay -S ruby-neovim

    Edit .profile in home directory and add a gem path.

    $ vim ~/.profile
    # Add Ruby Gem Path
    export PATH=$PATH:$HOME/.local/share/gem/3.0.0/bin

    Reload .profile file.

    $ source ~/.profile

    Install Node.js provider

    $ yay -S nodejs-neovim

    Edit Environment Variables for Perl provider

    Edit .profile on your home directory.

    $ vim ~/.profile
    # Add Perl Environment Variables
    export PERL_MB_OPT="--install_base $HOME/perl5"
    export PERL_MM_OPT="INSTALL_BASE=$HOME/perl5"
    export PERL_LOCAL_LIB_ROOT=$HOME/perl5
    export PERL5LIB="$$PERL5LIB:$HOME/perl5/lib/perl5"
    export PATH="$PATH:$HOME/perl5/bin"

    Reload .profile file.

    $ source ~/.profile

    Install Perl provider

    $ sudo pacman -S cpanminus
    $ sudo pacman -S perl-local-lib
    $ cpanm -n Neovim::Ext

    Install Clipboard

    $ sudo pacman -S xclip

    Enable Clipboard

    Edit ~/.config/nvim/init.vim

    set clipboard+=unnamed,unnamedplus

    Chack health

    Open neovim and type following command.

    :checkhealth

    Note:

    If you have installed Perl host provider(Neovim::Ext) and still checkhealth warning appears, delete ~/perl5 directory, and reinstall Neovim::Ext.

    $ rm -rf ~/perl5
    $ cpanm -n Neovim::Ext
  • Setup In-memory Cache on Nextcloud

    Setup In-memory cache on Nextcloud

    You shoud setup memory cache on Nextcloud for performance. Now I choosed APCu for local memory cache, Redis for distributed and locking memory cache.

    Enable memory cache on Nextcloud

    Edit nextcloud config.php file.

    $ sudo vi /misc/extHDD/nc.lama-lab.mydns.jp/config/config.php
    ...
    'memcache.local'=>'\OC\Memcache\APCu',
    'memcache.distributed'=>'\OC\Memcache\Redis',
    'memcache.locking'=>'\OC\Memcache\Redis',
    'redis' =>
      array (
        'host'=>'/run/redis/redis.sock',
        'port'=>0,
        'dbindex'=>0,
        'password'=>'',
        'timeout'=>1.5,
      ),
    ...

    Restart Nginx

    $ sudo systemctl restart nginx
  • Install Memory Cache

    To enhance performance of Nextcloud, Install memory cache. Redis is a key-value memory cache.

    Install Redis

    $ sudo pacman -S redis

    Configure Redis

    Enable socket communications to Redis for perfomance.

    $ sudo vi /etc/redis/redis.conf
    ...
    port 0
    unixsocket /run/redis/redis.sock
    unixsocketperm 700
    ...
    $ sudo systemctl start redis
    
    $sudo systemctl enable redis

    Check socket communications

    $ sudo redis-cli -s /run/redis/redis.sock
    > monitor

    If this command returns OK, the socket communication is established properly.

    Restart and Enable Redis

    $ sudo systemctl restart redis
    $ sudo systemctl enable redis
  • Tune up php.ini file

    For performance, tune up php.ini file.

    Edit php.ini

    $ sudo vi /etc/php/php.ini
    ...
    memory_limit=512M
    upload_max_filesize=5G
    post_max_size=5G
    
    cgi.fix_pathinfo=0
    
    zend_extenson=opcache
    
    [opcache]
    opcache.enable=1
    opcache.intend_string_buffer=8
    opcache.max_accelerated_files=10000
    opcache.memory_consumption=128
    opcache.save_comments=1
    opcache.revalidate_freq=2
    ...

    Restart PHP-FPM

    $ sudo systemctl restart php-fpm
  • HTTP/2

    Enable HTTP/2

    To enable HTTP/2 connections, edit nginx site speciffic files.

    $ sudo vi /etc/nginx/sites-available/www.lama-lab.mydns.jp.conf

    Add “http2” word at the end of listen sentence.

    ...
    listen 443 ssl http2
    listen [::]:443 ssl http2
    ...

    Then restart Nginx.

    $ sudo systemctl restart nginx
  • SSL

    Install Certbot

    You can use free SSL certification by Let’s Encrypt. First, you should install certbot to use Let’s Encrypt.

    $ sudo pacman -S certbot certbot-nginx

    Certificate sites

    To certificate domain www.lama-lab.mydns.jp/ and nc.lama-lab.mydns.jp, type

    $ sudo certbot --nginx --agree-tos --domain www.lama-lab.mydns.jp/ --domain nc.lama-lab.mydns.jp --email 'msguardian06@gmail.com' --no-eff-email

    Configure Firewall

    $ sudo ufw allow https
    $ sudo ufw reload

    Scheduling Certification renew

    The certification will be expired every 3 months. So you should renew the certification automatically.

    $ sudo vi /etc/cron.daily/certbot-renew
    #!/bin/sh
    certbot renew --post-hook "systemctl reload nginx"

    Change the permission of the script.

    $sudo chmod 755 /etc/cron.daily/certbot-renew

    Note: How to delete a certification

    To delete a certification, type

    $ sudo certbot delete --cert-name www.lama-lab.mydns.jp/
  • Setup Nextcloud

    Download and extract Nextcloud

    $ wget https://download.nextcloud.com/server/releases/latest.tar.bz2
    $ sudo mv latest.tar.bz2 /misc/extHDD/
    $ sudo tar xvjf latest.tar.bz2
    $ sudo mv /misc/extHDD/nextcloud /misc/extHDD/nc.lama-lab.mydns.jp
    $ sudo chown http:http /misc/extHDD/nc.lama-lab.mydns.jp

    Accomplish Setup

    Visit

    http://nc.lama-lab.mydns.jp

    And input all database infomation. Then all is done!!

  • Configure Nginx for Nextcloud

    Deploy config files

    Nextcloud config file

    $ sudo vi /etc/nginx/global/nextcloud.conf
    # Prevent nginx HTTP Server Detection
    server_tokens off;
    
    # set max upload size and increase upload timeout:
    client_max_body_size 5G;
    client_body_buffer_size 512M;
    client_body_timeout 1800s;
    fastcgi_read_timeout 1800s;
    fastcgi_buffers 64 8K;
    
    # HTTP response headers borrowed from Nextcloud `.htaccess`
    add_header Referrer-Policy "no-referrer"   always;
    add_header X-Content-Type-Options "nosniff"       always;
    add_header X-Download-Options "noopen"        always;
    add_header X-Frame-Options "SAMEORIGIN"    always;
    add_header X-Permitted-Cross-Domain-Policies "none"          always;
    add_header X-Robots-Tag "none" always;
    add_header X-XSS-Protection "1; mode=block" always;
    
    # Remove X-Powered-By, which is an information leak
    fastcgi_hide_header X-Powered-By;
    
    # Specify how to handle directories -- specifying `/index.php$request_uri`
    # here as the fallback means that Nginx always exhibits the desired behaviour
    # when a client requests a path that corresponds to a directory that exists
    # on the server. In particular, if that directory contains an index.php file,
    # that file is correctly served; if it doesn't, then the request is passed to
    # the front-end controller. This consistent behaviour means that we don't need
    # to specify custom rules for certain paths (e.g. images and other assets,
    # `/updater`, `/ocm-provider`, `/ocs-provider`), and thus
    # `try_files $uri $uri/ /index.php$request_uri`
    # always provides the desired behaviour.
    index index.php index.html /index.php$request_uri;
    
    # Rule borrowed from `.htaccess` to handle Microsoft DAV clients
    location = / {
        if ( $http_user_agent ~ ^DavClnt ) {
            return 302 /remote.php/webdav/$is_args$args;
        }
    }
    
    # Make a regex exception for `/.well-known` so that clients can still
    # access it despite the existence of the regex rule
    # `location ~ /(\.|autotest|...)` which would otherwise handle requests
    # for `/.well-known`.
    location ^~ /.well-known {
        # The rules in this block are an adaptation of the rules
        # in `.htaccess` that concern `/.well-known`.
    
        location = /.well-known/carddav { return 301 /remote.php/dav/; }
        location = /.well-known/caldav  { return 301 /remote.php/dav/; }
    
        location /.well-known/acme-challenge    { try_files $uri $uri/ =404; }
        location /.well-known/pki-validation    { try_files $uri $uri/ =404; }
    
        # Let Nextcloud's API for `/.well-known` URIs handle all other
        # requests by passing them to the front-end controller.
        return 301 /index.php$request_uri;
    }
    
    # Rules borrowed from `.htaccess` to hide certain paths from clients
    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/)  { return 404; }
    location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console)                { return 404; }
    
    # Ensure this block, which passes PHP files to the PHP process, is above the blocks
    # which handle static assets (as seen below). If this block is not declared first,
    # then Nginx will encounter an infinite rewriting loop when it prepends `/index.php`
    # to the URI, resulting in a HTTP 500 error response.
    location ~ \.php(?:$|/) {
        # Required for legacy support
        rewrite ^/(?!index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+|.+\/richdocumentscode\/proxy) /index.php$request_uri;
    
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
        set $path_info $fastcgi_path_info;
    
        try_files $fastcgi_script_name =404;
    
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $path_info;
        fastcgi_param HTTPS on;
    
        fastcgi_param modHeadersAvailable true;         # Avoid sending the security headers twice
        fastcgi_param front_controller_active true;     # Enable pretty urls
        fastcgi_pass php-handler;
    
        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
    
        fastcgi_max_temp_file_size 0;
        fastcgi_connect_timeout 1800s;
        fastcgi_read_timeout 1800s;
    }
    
    location ~ \.(?:css|js|svg|gif|png|jpg|ico|wasm|tflite|map)$ {
        try_files $uri /index.php$request_uri;
        add_header Cache-Control "public, max-age=15778463, $asset_immutable";
        access_log off;     # Optional: Don't log access to assets
    
        location ~ \.wasm$ {
            default_type application/wasm;
        }
    }
    
    location ~ \.woff2?$ {
        try_files $uri /index.php$request_uri;
        expires 7d;         # Cache-Control policy borrowed from `.htaccess`
        access_log off;     # Optional: Don't log access to assets
    }
    
    # Rule borrowed from `.htaccess`
    location /remote {
        return 301 /remote.php$request_uri;
    }
    
    location / {
        try_files $uri $uri/ /index.php$request_uri;
    }
    

    Site specific config file

    $ sudo vi /etc/nginx/sites-available/nc.lama-lab.mydns.jp
    # Set the `immutable` cache control options only for assets with a cache busting `v` argument
    map $arg_v $asset_immutable {
        "" "";
        default "immutable";
    }
    
    # Redirect everything to the main site. We use a separate server statement and >
    #server {
    #        server_name  _;
    #        return 302 $scheme://nc.lama-lab.mydns.jp$request_uri;
    #}
    
    server {
        server_name nc.lama-lab.mydns.jp;
        root /misc/extHDD/nc.lama-lab.mydns.jp;
    
        access_log /var/log/nginx/nc.lama-lab.mydns.jp.access.log;
        error_log /var/log/nginx/nc.lama-lab.mydns.jp.error.log;
    
        index index.php;
    
        include global/restrictions.conf;
    
        # Additional rules go here.
    
        # Only include one of the files below.
         include global/nextcloud.conf;
    #    include global/nextcloud-ms-subdir.conf;
    #    include global/nextcloud-ms-subdomain.conf;
    
        listen [::]:80;
        listen 80;
    }

    Enable the Web site

    $ sudo ln -s /etc/nginx/sites-available/nc.lama-lab.mydns.jp.conf /etc/nginx/sites-enabled/nc.lama-lab.mydns.jp.conf
    $ sudo systemctl restart nginx
    $ sudo systemctl restart php-fpm
  • Create Database for Nextcloud

    Database Infomation

    • Database name : nextcloud_db
    • User name : nextcloud_user
    • Character set : utf8mb4
    • Password : XXXXXXXX

    Create Database

    $ sudo mysql -u root -p
    > CREATE DATABASE nextcloud_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
    > GRANT ALL PRIVILLEGES ON nextcloud_db.* TO 'nextcloud_user'@'localhost' IDENTIFIED BY 'XXXXXXXX';
    > FLUSH PRIVILLEGES;
    > EXIT;