<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>maocypher.dev</title>
    <description>My personal webpage</description>
    <link>https://maocypher.github.io/</link>
    <atom:link href="https://maocypher.github.io/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Thu, 01 Jan 2026 07:18:31 +0000</pubDate>
    <lastBuildDate>Thu, 01 Jan 2026 07:18:31 +0000</lastBuildDate>
    <generator>Jekyll v3.10.0</generator>

    
      <item>
        <title>Save Nextcloud data when Proxmox backup is too big to be restored</title>
        <description>&lt;h2 id=&quot;what-happend&quot;&gt;What happend?&lt;/h2&gt;

&lt;p&gt;Until I had my update-day for my homelab I run Nextcloud on Alpine Linux without issues as VM on my Proxmox. I had daily backups that were created and stored in my Proxmox Backup Server. Everything was fine.
In the beginning of 2025 I wrote a guide “how to update Nextcloud on Alpine Linux”. So, I took that guide and did everything as usual, but in the end I was not able to fully upgrade Nextcloud. At some point it was impossible to continue.&lt;/p&gt;

&lt;p&gt;Smart as I was, I stopped to continue the installation and wanted to restore the backup I had. BUT I was not aware of the fact, that my backup was to big to be restored with the remaining disk space I had. What happend next, was that after triggering the restore of my backup, the existing VM was simply gone…&lt;/p&gt;

&lt;h2 id=&quot;the-plan&quot;&gt;The plan&lt;/h2&gt;

&lt;p&gt;As I wanted to update Nextcloud and my VM was now gone, I needed a new plan how to proceed from here. I didn’t want to run into the same issue again, when I continue using Alpine Linux, so I decided to install a new VM using the &lt;a href=&quot;https://community-scripts.github.io/ProxmoxVE/scripts?id=nextcloud-vm&quot;&gt;TurnKey VM&lt;/a&gt; provided by the community-scripts. My disk with all the data still existed (btw. the disk size was 2TB and the compressed backup like 450GB), so I tried to create a brand new VM and load the data as additional disk into the VM.&lt;/p&gt;

&lt;h2 id=&quot;recovering-nextcloud-data&quot;&gt;Recovering Nextcloud data&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;I installed Nextcloud in a new VM (with a different ID) from the &lt;a href=&quot;https://community-scripts.github.io/ProxmoxVE/scripts?id=nextcloud-vm&quot;&gt;community-scripts&lt;/a&gt;.&lt;/li&gt;
  &lt;li&gt;After the successful installation I first updated to the latest Nextcloud version via the included updater&lt;/li&gt;
  &lt;li&gt;I created all existing users (for me it was possible to create them manually again, because I only have 2 users at home)&lt;/li&gt;
  &lt;li&gt;Then the interessting part started, recovering the user data
    &lt;ul&gt;
      &lt;li&gt;Shutdown Nextcloud&lt;/li&gt;
      &lt;li&gt;Open proxmox shell and add the old storage to the Nextcloud VM&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;qm &lt;span class=&quot;nb&quot;&gt;set&lt;/span&gt; &amp;lt;new vm &lt;span class=&quot;nb&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--scsi2&lt;/span&gt; &amp;lt;your storage e.g. &lt;span class=&quot;nb&quot;&gt;local&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;:vm-&amp;lt;old &lt;span class=&quot;nb&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;-disk-0&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# qm set 102 --scsi2 local:vm-101-disk-0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;After adding the disk to the VM, it can be started again&lt;/li&gt;
  &lt;li&gt;Next it is necessary to mount the disk in the right place&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# create a folder to mount the disk temporarily&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; /mnt
&lt;span class=&quot;nb&quot;&gt;mkdir&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-p&lt;/span&gt; nextcloud-legacy

&lt;span class=&quot;c&quot;&gt;# check the path of disk, for me it was /dev/sdb for you it might be different&lt;/span&gt;
lsblk
mount /dev/sdb /mnt/nextcloud-legacy

&lt;span class=&quot;c&quot;&gt;# copy current nextcloud data&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;cp&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-r&lt;/span&gt; /var/www/nextcloud-data/&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; /mnt/nextcloud-legacy

&lt;span class=&quot;c&quot;&gt;# check that all data were copied, if not copy them manually, e.g.&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;cp&lt;/span&gt; /var/www/nextcloud-data/.htaccess /mnt/nextcloud-legacy
&lt;span class=&quot;nb&quot;&gt;cp&lt;/span&gt; /var/www/nextcloud-data/.ncdata /mnt/nextcloud-legacy

&lt;span class=&quot;c&quot;&gt;# change the owner to match the needed owner to access the data&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;chown&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-R&lt;/span&gt; www-data:www-data /mnt/nextcloud-legacy/&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# identify the disk for fstab usage&lt;/span&gt;
blkid /dev/sdb
umount /dev/sdb

nvim /etc/fstab
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;With that we are now good to go and replace the current data with the recovered data&lt;/li&gt;
  &lt;li&gt;Next we should mount the data automatically on reboot&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;/etc/fstab&lt;/em&gt;&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# /etc/fstab: static file system information.
#
# Use &apos;blkid&apos; to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# &amp;lt;file system&amp;gt; &amp;lt;mount point&amp;gt;   &amp;lt;type&amp;gt;  &amp;lt;options&amp;gt;       &amp;lt;dump&amp;gt;  &amp;lt;pass&amp;gt;
/dev/mapper/turnkey-root /               ext4    errors=remount-ro 0       1
/dev/mapper/turnkey-swap_1 none            swap    sw              0       0
UUID=&quot;&amp;lt;your GUID from blkid&amp;gt;&quot; /var/www/nextcloud-data ext4 defaults 0 2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Now reboot your VM&lt;/li&gt;
  &lt;li&gt;After rebooting you should see in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lsblk&lt;/code&gt; that your disk is mounted to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/var/www/nextcloud-data&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Data should be accessable via WebUi as before&lt;/li&gt;
  &lt;li&gt;Now we restore the user data to be accessable&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# Now you should know where the old data was stored. For me it was: /var/lib/nextcloud/data on the mounted disk&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;cd&lt;/span&gt; /var/www/nextcloud-data

&lt;span class=&quot;c&quot;&gt;# I backuped the current data temporarily&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;mv&lt;/span&gt; &amp;lt;username&amp;gt;/ &amp;lt;username&amp;gt;-backup

&lt;span class=&quot;c&quot;&gt;# Restore the old data&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;mv&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-r&lt;/span&gt; var/lib/nextcloud/data/&amp;lt;username&amp;gt; ./
&lt;span class=&quot;nb&quot;&gt;chown&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-R&lt;/span&gt; www-data:www-data &amp;lt;username&amp;gt;

&lt;span class=&quot;c&quot;&gt;# Make nextcloud aware of all the data, these creates needed database entries&lt;/span&gt;
turnkey-occ files:scan &lt;span class=&quot;nt&quot;&gt;-vv&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-p&lt;/span&gt; /&amp;lt;username&amp;gt;/files &amp;lt;username&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;The scan takes a while depending on the amount of data&lt;/li&gt;
  &lt;li&gt;After a successful scan you should now see all your data again in the WebUi&lt;/li&gt;
  &lt;li&gt;The calendar I restored from my exported .ics file via my mobile phone&lt;/li&gt;
  &lt;li&gt;All data from the old Alpine Linux OS can be removed savely&lt;/li&gt;
&lt;/ul&gt;
</description>
        <pubDate>Tue, 30 Dec 2025 23:00:00 +0000</pubDate>
        <link>https://maocypher.github.io/blog/2025-12-31-save-nextcloud-data-when-backup-too-big/</link>
        <guid isPermaLink="true">https://maocypher.github.io/blog/2025-12-31-save-nextcloud-data-when-backup-too-big/</guid>
      </item>
    
      <item>
        <title>Updating Nextcloud on Proxmox LXC with Alpine Linux</title>
        <description>&lt;h2 id=&quot;installing-nextcloud-on-proxmox&quot;&gt;Installing Nextcloud on Proxmox&lt;/h2&gt;

&lt;p&gt;For installing Nextcloud on my Proxmox VE as LXC with Alpine Linux I used the &lt;a href=&quot;https://github.com/tteck/Proxmox&quot;&gt;Proxmox helper scripts from tteck&lt;/a&gt; (now continued in the &lt;a href=&quot;https://community-scripts.github.io/ProxmoxVE/&quot;&gt;community scripts&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;I followed &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;How-to-install&lt;/code&gt; for Alpine-Linux with the &lt;a href=&quot;https://community-scripts.github.io/ProxmoxVE/scripts?id=nextcloudpi&quot;&gt;community script&lt;/a&gt; and was happy until I did my first try updating Nextcloud to the next major version.&lt;/p&gt;

&lt;h2 id=&quot;upgrading-nextcloud&quot;&gt;Upgrading Nextcloud&lt;/h2&gt;

&lt;p&gt;First I tried to follow the manual from &lt;a href=&quot;https://docs.nextcloud.com/server/latest/admin_manual/maintenance/upgrade.html&quot;&gt;Nextcloud&lt;/a&gt; to upgrade to the next major version, but it failed completely and I wasn’t able to get it running again. So I reverted my changes and installed my backup.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;CAUTION&lt;/strong&gt;
Make sure you have a valid backup before starting with the upgrade&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;Identify the version of your nextcloud hub. You can find this on the Admin UI &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Administrator Settings -&amp;gt; Overview -&amp;gt; Version&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Set nextcloud into &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Maintenance mode&lt;/code&gt; by calling &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;occ maintenance:mode --on&lt;/code&gt;. Unlike on other installation of nextcloud on alpine it wasn’t necessary for me to call it like this &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sudo -u www-data php occ maintenance:mode --on&lt;/code&gt;. On the one hand &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sudo&lt;/code&gt; isn’t installed and on the other hand the users are either &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nextcloud&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nginx&lt;/code&gt; depending on the installed nextcloud version.&lt;/li&gt;
  &lt;li&gt;With &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;apk list | grep nextcloud | grep installed&lt;/code&gt; you can list all nextcloud packages that are installed&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# enable maintenance mode&lt;/span&gt;
occ maintenance:mode &lt;span class=&quot;nt&quot;&gt;--on&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# list current installed packages (here you can already see possible dependency packages that must also be updated)&lt;/span&gt;
apk list | &lt;span class=&quot;nb&quot;&gt;grep &lt;/span&gt;nextcloud | &lt;span class=&quot;nb&quot;&gt;grep &lt;/span&gt;installed
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Hint&lt;/strong&gt;
In my case I only had nextcloud packages (without the version in the package name) which was nextcloud hub 27&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt;
On &lt;a href=&quot;https://pkgs.alpinelinux.org/packages?name=nextcloud*&amp;amp;branch=edge&amp;amp;repo=&amp;amp;arch=x86_64&amp;amp;origin=&amp;amp;flagged=&amp;amp;maintainer=&quot;&gt;alpine packages&lt;/a&gt; you can find current available nextcloud packages&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;Install the next major version of nextcloud hub e.g. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;apk add nextcloud28&lt;/code&gt; if this runs into issues because &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nextcloud&lt;/code&gt; is blocking files you can try running &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;apk add nextcloud28 --force-overwrite&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;occ upgrade&lt;/code&gt; to start the upgrade process. During this step it might happen that occ cannot finish the update, because apps are not compatible the new version. In that case I disabled all apps by using this command e.g. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;occ app:disable files_sharing&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;All the packages you disabled are probably available as alpine package and should be installed manually e.g. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;apk add nextcloud29-files_sharing&lt;/code&gt;. Also here when nextcloud was blocking I installed it with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;apk add nextcloud29-files_sharing --force-overwrite&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;When you updated all dependencies try running &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;occ upgrade&lt;/code&gt; it should be successful now.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# install nextcloud hub; optional use --force-overwrite&lt;/span&gt;
apk add nextcloud28

&lt;span class=&quot;c&quot;&gt;# the first run of this will fail very likely due to dependencies&lt;/span&gt;
occ upgrade

&lt;span class=&quot;c&quot;&gt;# disable dependency packages and upgrade them manually; optional use --force-overwrite if necessary&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# repeat this for all of your dependencies&lt;/span&gt;
occ app:disable &amp;lt;your dependency package&amp;gt;
apk add nextcloud28-&amp;lt;your dependency package&amp;gt;

&lt;span class=&quot;c&quot;&gt;# should be successful now&lt;/span&gt;
occ upgrade
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Finalize the upgrade scripts from nextcloud&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;occ db:add-missing-columns
occ db:add-missing-indices
occ db:add-missing-primary-keys
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Remove old nextcloud packages e.g.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# First steps depends on your nextcloud version and installed dependencies&lt;/span&gt;
apk del nextcloud-federation nextcloud-notifications nextcloud-files_trashbin nextcloud-dashboard nextcloud-mysql nextcloud-comments nextcloud-admin_audit nextcloud-files_external nextcloud-support nextcloud-weather_status nextcloud-systemtags nextcloud-default-apps nextcloud-files_sharing nextcloud-sharebymail nextcloud-user_status nextcloud-files_versions nextcloud-encryption nextcloud-initscript nextcloud-suspicious_login
apk del nextcloud
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Enable dependencies again and ensure they are upgraded&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# enable dependencies again&lt;/span&gt;
occ app:enable &amp;lt;your dependency package&amp;gt;
occ upgrade
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Disable the maintenance mode again and try access nextcloud. Depending on the changes that were made by nextcloud you are not done with the upgrade yet and you will fail seeing the login page.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;occ maintenance:mode &lt;span class=&quot;nt&quot;&gt;--off&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;When you can login check on Admin-UI which error you should fix in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/nextcloud/config.php&lt;/code&gt;, because an update of the configuration is needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;nextcloud-hub-28-to-29&quot;&gt;Nextcloud Hub 28 to 29&lt;/h2&gt;

&lt;h4 id=&quot;occ&quot;&gt;OCC&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;With the update to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nextcloud29&lt;/code&gt; &lt;em&gt;occ&lt;/em&gt; has its own package in alpine linux&lt;/li&gt;
  &lt;li&gt;From upgrade nextcloud 28 to 29 the php version changed and I had to update some more packages. Make sure to run &lt;em&gt;occ&lt;/em&gt; from the target version.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;apk add nextcloud29
apk add nextcloud29-occ

&lt;span class=&quot;c&quot;&gt;#ensure to use the new occ version&lt;/span&gt;
which occ
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;post-upgrade&quot;&gt;Post-Upgrade&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Enable maintenance mode&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;php-83&quot;&gt;PHP 8.3&lt;/h4&gt;

&lt;p&gt;Between &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nextcloud28&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nextcloud29&lt;/code&gt; there were changes in the php version, so I had to install the following php packages&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;apk add php83 php83-xml libxml2 libxml2-dev php83-xmlreader php83-xmlwriter php83-simplexml php83-pecl-redis php83-pdo_mysql php83-fpm
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Configure &lt;em&gt;php83-fpm&lt;/em&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nano /etc/php83/php-fpm.d/www.conf&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;/etc/php83/php-fpm.d/www.conf&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;language-config highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;[&lt;span class=&quot;n&quot;&gt;www&lt;/span&gt;]
&lt;span class=&quot;n&quot;&gt;user&lt;/span&gt; = &lt;span class=&quot;n&quot;&gt;nginx&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;group&lt;/span&gt; = &lt;span class=&quot;n&quot;&gt;nginx&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;listen&lt;/span&gt; = /&lt;span class=&quot;n&quot;&gt;run&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;nextcloud&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;fastcgi&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;sock&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;listen&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;owner&lt;/span&gt; = &lt;span class=&quot;n&quot;&gt;nginx&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;listen&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;group&lt;/span&gt; = &lt;span class=&quot;n&quot;&gt;nginx&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;listen&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;mode&lt;/span&gt; = &lt;span class=&quot;m&quot;&gt;0660&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;pm&lt;/span&gt; = &lt;span class=&quot;n&quot;&gt;dynamic&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;pm&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;max_children&lt;/span&gt; = &lt;span class=&quot;m&quot;&gt;5&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;pm&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;start_servers&lt;/span&gt; = &lt;span class=&quot;m&quot;&gt;2&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;pm&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;min_spare_servers&lt;/span&gt; = &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;pm&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;max_spare_servers&lt;/span&gt; = &lt;span class=&quot;m&quot;&gt;3&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;env&lt;/span&gt;[&lt;span class=&quot;n&quot;&gt;PATH&lt;/span&gt;] = /&lt;span class=&quot;n&quot;&gt;usr&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;local&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;sbin&lt;/span&gt;:/&lt;span class=&quot;n&quot;&gt;usr&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;local&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;bin&lt;/span&gt;:/&lt;span class=&quot;n&quot;&gt;usr&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;sbin&lt;/span&gt;:/&lt;span class=&quot;n&quot;&gt;usr&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;bin&lt;/span&gt;:/&lt;span class=&quot;n&quot;&gt;sbin&lt;/span&gt;:/&lt;span class=&quot;n&quot;&gt;bin&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Add to auto start&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;rc-service php-fpm83 start
rc-update add php-fpm83 default
rc-service nginx restart
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;nginx&quot;&gt;Nginx&lt;/h4&gt;

&lt;p&gt;With nextcloud hub 29 a lot of changes were necessary in nginx config. Older nexcloud nginx config were much smaller. To solve a lot of issues I took the config from &lt;a href=&quot;https://docs.nextcloud.com/server/latest/admin_manual/installation/nginx.html&quot;&gt;nextcloud manual&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;/etc/nginx/http.d/nextcloud.conf&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;language-config highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;upstream&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;php&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;handler&lt;/span&gt; {
&lt;span class=&quot;c&quot;&gt;#    #server 127.0.0.1:9000;
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;server&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;unix&lt;/span&gt;:/&lt;span class=&quot;n&quot;&gt;run&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;nextcloud&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;fastcgi&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;sock&lt;/span&gt;;
}

&lt;span class=&quot;c&quot;&gt;# Set the `immutable` cache control options only for assets with a cache busting `v` argument
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;map&lt;/span&gt; $&lt;span class=&quot;n&quot;&gt;arg_v&lt;/span&gt; $&lt;span class=&quot;n&quot;&gt;asset_immutable&lt;/span&gt; {
    &lt;span class=&quot;s2&quot;&gt;&quot;&quot;&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&quot;&lt;/span&gt;;
    &lt;span class=&quot;n&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;, immutable&quot;&lt;/span&gt;;
}

&lt;span class=&quot;n&quot;&gt;server&lt;/span&gt; {
    &lt;span class=&quot;n&quot;&gt;listen&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;80&lt;/span&gt;;
    &lt;span class=&quot;n&quot;&gt;listen&lt;/span&gt; [::]:&lt;span class=&quot;m&quot;&gt;80&lt;/span&gt;;
    &lt;span class=&quot;n&quot;&gt;server_name&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;localhost&lt;/span&gt;;

    &lt;span class=&quot;c&quot;&gt;# Prevent nginx HTTP Server Detection
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;server_tokens&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;off&lt;/span&gt;;

    &lt;span class=&quot;c&quot;&gt;# Enforce HTTPS
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;301&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;https&lt;/span&gt;://$&lt;span class=&quot;n&quot;&gt;server_name&lt;/span&gt;$&lt;span class=&quot;n&quot;&gt;request_uri&lt;/span&gt;;
}

&lt;span class=&quot;n&quot;&gt;server&lt;/span&gt; {
    &lt;span class=&quot;n&quot;&gt;listen&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;443&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ssl&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;http2&lt;/span&gt;;
    &lt;span class=&quot;n&quot;&gt;listen&lt;/span&gt; [::]:&lt;span class=&quot;m&quot;&gt;443&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ssl&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;http2&lt;/span&gt;;
    &lt;span class=&quot;c&quot;&gt;# With NGinx &amp;gt;= 1.25.1 you should use this instead:
&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;# listen 443      ssl;
&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;# listen [::]:443 ssl;
&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;# http2 on;
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;server_name&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;localhost&lt;/span&gt;;

    &lt;span class=&quot;c&quot;&gt;# Path to the root of your installation
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;root&lt;/span&gt; /&lt;span class=&quot;n&quot;&gt;usr&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;share&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;webapps&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;nextcloud&lt;/span&gt;;

    &lt;span class=&quot;c&quot;&gt;# Use Mozilla&apos;s guidelines for SSL/TLS settings
&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;# https://mozilla.github.io/server-side-tls/ssl-config-generator/
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;ssl_certificate&lt;/span&gt;     /&lt;span class=&quot;n&quot;&gt;etc&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;ssl&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;certs&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;nextcloud&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;selfsigned&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;crt&lt;/span&gt;;
    &lt;span class=&quot;n&quot;&gt;ssl_certificate_key&lt;/span&gt; /&lt;span class=&quot;n&quot;&gt;etc&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;ssl&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;private&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;nextcloud&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;selfsigned&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;key&lt;/span&gt;;

    &lt;span class=&quot;c&quot;&gt;# Prevent nginx HTTP Server Detection
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;server_tokens&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;off&lt;/span&gt;;

    &lt;span class=&quot;c&quot;&gt;# HSTS settings
&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;# WARNING: Only add the preload option once you read about
&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;# the consequences in https://hstspreload.org/. This option
&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;# will add the domain to a hardcoded list that is shipped
&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;# in all major browsers and getting removed from this list
&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;# could take several months.
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;add_header&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Strict&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;Transport&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;Security&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;max-age=15552000; preload&quot;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;always&lt;/span&gt;;

    &lt;span class=&quot;c&quot;&gt;# set max upload size and increase upload timeout:
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;client_max_body_size&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;512&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;M&lt;/span&gt;;
    &lt;span class=&quot;n&quot;&gt;client_body_timeout&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;300&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;s&lt;/span&gt;;
    &lt;span class=&quot;n&quot;&gt;fastcgi_buffers&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;64&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;K&lt;/span&gt;;

    &lt;span class=&quot;c&quot;&gt;# Enable gzip but do not remove ETag headers
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;gzip&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;on&lt;/span&gt;;
    &lt;span class=&quot;n&quot;&gt;gzip_vary&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;on&lt;/span&gt;;
    &lt;span class=&quot;n&quot;&gt;gzip_comp_level&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;4&lt;/span&gt;;
    &lt;span class=&quot;n&quot;&gt;gzip_min_length&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;256&lt;/span&gt;;
    &lt;span class=&quot;n&quot;&gt;gzip_proxied&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;expired&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;no&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;cache&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;no&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;store&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;no_last_modified&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;no_etag&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;auth&lt;/span&gt;;
    &lt;span class=&quot;n&quot;&gt;gzip_types&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;application&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;atom&lt;/span&gt;+&lt;span class=&quot;n&quot;&gt;xml&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;javascript&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;application&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;javascript&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;application&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;json&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;application&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;ld&lt;/span&gt;+&lt;span class=&quot;n&quot;&gt;json&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;application&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;manifest&lt;/span&gt;+&lt;span class=&quot;n&quot;&gt;json&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;application&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;rss&lt;/span&gt;+&lt;span class=&quot;n&quot;&gt;xml&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;application&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;vnd&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;geo&lt;/span&gt;+&lt;span class=&quot;n&quot;&gt;json&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;application&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;vnd&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;ms&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;fontobject&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;application&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;wasm&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;application&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;font&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;ttf&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;application&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;web&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;app&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;manifest&lt;/span&gt;+&lt;span class=&quot;n&quot;&gt;json&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;application&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;xhtml&lt;/span&gt;+&lt;span class=&quot;n&quot;&gt;xml&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;application&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;xml&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;font&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;opentype&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;image&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;bmp&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;image&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;svg&lt;/span&gt;+&lt;span class=&quot;n&quot;&gt;xml&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;image&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;icon&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;cache&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;manifest&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;css&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;plain&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;vcard&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;vnd&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;rim&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;location&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;xloc&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;vtt&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;component&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;cross&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;domain&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;policy&lt;/span&gt;;

    &lt;span class=&quot;c&quot;&gt;# Pagespeed is not supported by Nextcloud, so if your server is built
&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;# with the `ngx_pagespeed` module, uncomment this line to disable it.
&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;#pagespeed off;
&lt;/span&gt;
    &lt;span class=&quot;c&quot;&gt;# The settings allows you to optimize the HTTP2 bandwidth.
&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;# See https://blog.cloudflare.com/delivering-http-2-upload-speed-improvements/
&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;# for tuning hints
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;client_body_buffer_size&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;512&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;k&lt;/span&gt;;

    &lt;span class=&quot;c&quot;&gt;# HTTP response headers borrowed from Nextcloud `.htaccess`
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;add_header&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Referrer&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;Policy&lt;/span&gt;                   &lt;span class=&quot;s2&quot;&gt;&quot;no-referrer&quot;&lt;/span&gt;       &lt;span class=&quot;n&quot;&gt;always&lt;/span&gt;;
    &lt;span class=&quot;n&quot;&gt;add_header&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;X&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;Content&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;Type&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;Options&lt;/span&gt;            &lt;span class=&quot;s2&quot;&gt;&quot;nosniff&quot;&lt;/span&gt;           &lt;span class=&quot;n&quot;&gt;always&lt;/span&gt;;
    &lt;span class=&quot;n&quot;&gt;add_header&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;X&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;Frame&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;Options&lt;/span&gt;                   &lt;span class=&quot;s2&quot;&gt;&quot;SAMEORIGIN&quot;&lt;/span&gt;        &lt;span class=&quot;n&quot;&gt;always&lt;/span&gt;;
    &lt;span class=&quot;n&quot;&gt;add_header&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;X&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;Permitted&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;Cross&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;Domain&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;Policies&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;none&quot;&lt;/span&gt;              &lt;span class=&quot;n&quot;&gt;always&lt;/span&gt;;
    &lt;span class=&quot;n&quot;&gt;add_header&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;X&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;Robots&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;Tag&lt;/span&gt;                      &lt;span class=&quot;s2&quot;&gt;&quot;noindex, nofollow&quot;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;always&lt;/span&gt;;
    &lt;span class=&quot;n&quot;&gt;add_header&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;X&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;XSS&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;Protection&lt;/span&gt;                  &lt;span class=&quot;s2&quot;&gt;&quot;1; mode=block&quot;&lt;/span&gt;     &lt;span class=&quot;n&quot;&gt;always&lt;/span&gt;;

    &lt;span class=&quot;c&quot;&gt;# Remove X-Powered-By, which is an information leak
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;fastcgi_hide_header&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;X&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;Powered&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;By&lt;/span&gt;;

    &lt;span class=&quot;c&quot;&gt;# Set .mjs and .wasm MIME types
&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;# Either include it in the default mime.types list
&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;# and include that list explicitly or add the file extension
&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;# only for Nextcloud like below:
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mime&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;types&lt;/span&gt;;
    &lt;span class=&quot;n&quot;&gt;types&lt;/span&gt; {
        &lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;javascript&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;mjs&lt;/span&gt;;
        &lt;span class=&quot;c&quot;&gt;#application/wasm wasm;
&lt;/span&gt;    }

    &lt;span class=&quot;c&quot;&gt;# Specify how to handle directories -- specifying `/index.php$request_uri`
&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;# here as the fallback means that Nginx always exhibits the desired behaviour
&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;# when a client requests a path that corresponds to a directory that exists
&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;# on the server. In particular, if that directory contains an index.php file,
&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;# that file is correctly served; if it doesn&apos;t, then the request is passed to
&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;# the front-end controller. This consistent behaviour means that we don&apos;t need
&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;# to specify custom rules for certain paths (e.g. images and other assets,
&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;# `/updater`, `/ocs-provider`), and thus
&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;# `try_files $uri $uri/ /index.php$request_uri`
&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;# always provides the desired behaviour.
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;index&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;index&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;php&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;index&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;html&lt;/span&gt; /&lt;span class=&quot;n&quot;&gt;index&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;php&lt;/span&gt;$&lt;span class=&quot;n&quot;&gt;request_uri&lt;/span&gt;;

    &lt;span class=&quot;c&quot;&gt;# Rule borrowed from `.htaccess` to handle Microsoft DAV clients
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;location&lt;/span&gt; = / {
        &lt;span class=&quot;n&quot;&gt;if&lt;/span&gt; ( $&lt;span class=&quot;n&quot;&gt;http_user_agent&lt;/span&gt; ~ ^&lt;span class=&quot;n&quot;&gt;DavClnt&lt;/span&gt; ) {
            &lt;span class=&quot;n&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;302&lt;/span&gt; /&lt;span class=&quot;n&quot;&gt;remote&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;php&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;webdav&lt;/span&gt;/$&lt;span class=&quot;n&quot;&gt;is_args&lt;/span&gt;$&lt;span class=&quot;n&quot;&gt;args&lt;/span&gt;;
        }
    }

    &lt;span class=&quot;n&quot;&gt;location&lt;/span&gt; = /&lt;span class=&quot;n&quot;&gt;robots&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;txt&lt;/span&gt; {
        &lt;span class=&quot;n&quot;&gt;allow&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;all&lt;/span&gt;;
        &lt;span class=&quot;n&quot;&gt;log_not_found&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;off&lt;/span&gt;;
        &lt;span class=&quot;n&quot;&gt;access_log&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;off&lt;/span&gt;;
    }

    &lt;span class=&quot;c&quot;&gt;# Make a regex exception for `/.well-known` so that clients can still
&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;# access it despite the existence of the regex rule
&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;# `location ~ /(\.|autotest|...)` which would otherwise handle requests
&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;# for `/.well-known`.
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;location&lt;/span&gt; ^~ /.&lt;span class=&quot;n&quot;&gt;well&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;known&lt;/span&gt; {
        &lt;span class=&quot;c&quot;&gt;# The rules in this block are an adaptation of the rules
&lt;/span&gt;        &lt;span class=&quot;c&quot;&gt;# in `.htaccess` that concern `/.well-known`.
&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;location&lt;/span&gt; = /.&lt;span class=&quot;n&quot;&gt;well&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;known&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;carddav&lt;/span&gt; { &lt;span class=&quot;n&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;301&lt;/span&gt; /&lt;span class=&quot;n&quot;&gt;remote&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;php&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;dav&lt;/span&gt;/; }
        &lt;span class=&quot;n&quot;&gt;location&lt;/span&gt; = /.&lt;span class=&quot;n&quot;&gt;well&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;known&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;caldav&lt;/span&gt;  { &lt;span class=&quot;n&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;301&lt;/span&gt; /&lt;span class=&quot;n&quot;&gt;remote&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;php&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;dav&lt;/span&gt;/; }

        &lt;span class=&quot;n&quot;&gt;location&lt;/span&gt; /.&lt;span class=&quot;n&quot;&gt;well&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;known&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;acme&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;challenge&lt;/span&gt;    { &lt;span class=&quot;n&quot;&gt;try_files&lt;/span&gt; $&lt;span class=&quot;n&quot;&gt;uri&lt;/span&gt; $&lt;span class=&quot;n&quot;&gt;uri&lt;/span&gt;/ =&lt;span class=&quot;m&quot;&gt;404&lt;/span&gt;; }
        &lt;span class=&quot;n&quot;&gt;location&lt;/span&gt; /.&lt;span class=&quot;n&quot;&gt;well&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;known&lt;/span&gt;/&lt;span class=&quot;n&quot;&gt;pki&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;validation&lt;/span&gt;    { &lt;span class=&quot;n&quot;&gt;try_files&lt;/span&gt; $&lt;span class=&quot;n&quot;&gt;uri&lt;/span&gt; $&lt;span class=&quot;n&quot;&gt;uri&lt;/span&gt;/ =&lt;span class=&quot;m&quot;&gt;404&lt;/span&gt;; }

        &lt;span class=&quot;c&quot;&gt;# Let Nextcloud&apos;s API for `/.well-known` URIs handle all other
&lt;/span&gt;        &lt;span class=&quot;c&quot;&gt;# requests by passing them to the front-end controller.
&lt;/span&gt;        &lt;span class=&quot;n&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;301&lt;/span&gt; /&lt;span class=&quot;n&quot;&gt;index&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;php&lt;/span&gt;$&lt;span class=&quot;n&quot;&gt;request_uri&lt;/span&gt;;
    }

    &lt;span class=&quot;c&quot;&gt;# Rules borrowed from `.htaccess` to hide certain paths from clients
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;location&lt;/span&gt; ~ ^/(?:&lt;span class=&quot;n&quot;&gt;build&lt;/span&gt;|&lt;span class=&quot;n&quot;&gt;tests&lt;/span&gt;|&lt;span class=&quot;n&quot;&gt;config&lt;/span&gt;|&lt;span class=&quot;n&quot;&gt;lib&lt;/span&gt;|&lt;span class=&quot;m&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rdparty&lt;/span&gt;|&lt;span class=&quot;n&quot;&gt;templates&lt;/span&gt;|&lt;span class=&quot;n&quot;&gt;data&lt;/span&gt;)(?:$|/)  { &lt;span class=&quot;n&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;404&lt;/span&gt;; }
    &lt;span class=&quot;n&quot;&gt;location&lt;/span&gt; ~ ^/(?:\.|&lt;span class=&quot;n&quot;&gt;autotest&lt;/span&gt;|&lt;span class=&quot;n&quot;&gt;occ&lt;/span&gt;|&lt;span class=&quot;n&quot;&gt;issue&lt;/span&gt;|&lt;span class=&quot;n&quot;&gt;indie&lt;/span&gt;|&lt;span class=&quot;n&quot;&gt;db_&lt;/span&gt;|&lt;span class=&quot;n&quot;&gt;console&lt;/span&gt;)                { &lt;span class=&quot;n&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;404&lt;/span&gt;; }

    &lt;span class=&quot;c&quot;&gt;# Ensure this block, which passes PHP files to the PHP process, is above the blocks
&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;# which handle static assets (as seen below). If this block is not declared first,
&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;# then Nginx will encounter an infinite rewriting loop when it prepends `/index.php`
&lt;/span&gt;    &lt;span class=&quot;c&quot;&gt;# to the URI, resulting in a HTTP 500 error response.
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;location&lt;/span&gt; ~ \.&lt;span class=&quot;n&quot;&gt;php&lt;/span&gt;(?:$|/) {
        &lt;span class=&quot;c&quot;&gt;# Required for legacy support
&lt;/span&gt;        &lt;span class=&quot;n&quot;&gt;rewrite&lt;/span&gt; ^/(?!&lt;span class=&quot;n&quot;&gt;index&lt;/span&gt;|&lt;span class=&quot;n&quot;&gt;remote&lt;/span&gt;|&lt;span class=&quot;n&quot;&gt;public&lt;/span&gt;|&lt;span class=&quot;n&quot;&gt;cron&lt;/span&gt;|&lt;span class=&quot;n&quot;&gt;core&lt;/span&gt;\/&lt;span class=&quot;n&quot;&gt;ajax&lt;/span&gt;\/&lt;span class=&quot;n&quot;&gt;update&lt;/span&gt;|&lt;span class=&quot;n&quot;&gt;status&lt;/span&gt;|&lt;span class=&quot;n&quot;&gt;ocs&lt;/span&gt;\/&lt;span class=&quot;n&quot;&gt;v&lt;/span&gt;[&lt;span class=&quot;m&quot;&gt;12&lt;/span&gt;]|&lt;span class=&quot;n&quot;&gt;updater&lt;/span&gt;\/.+|&lt;span class=&quot;n&quot;&gt;ocs&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;provider&lt;/span&gt;\/.+|.+\/&lt;span class=&quot;n&quot;&gt;richdocumentscode&lt;/span&gt;(&lt;span class=&quot;err&quot;&gt;_&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;arm64&lt;/span&gt;)?\/&lt;span class=&quot;n&quot;&gt;proxy&lt;/span&gt;) /&lt;span class=&quot;n&quot;&gt;index&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;php&lt;/span&gt;$&lt;span class=&quot;n&quot;&gt;request_uri&lt;/span&gt;;

        &lt;span class=&quot;n&quot;&gt;fastcgi_split_path_info&lt;/span&gt; ^(.+?\.&lt;span class=&quot;n&quot;&gt;php&lt;/span&gt;)(/.*)$;
        &lt;span class=&quot;n&quot;&gt;set&lt;/span&gt; $&lt;span class=&quot;n&quot;&gt;path_info&lt;/span&gt; $&lt;span class=&quot;n&quot;&gt;fastcgi_path_info&lt;/span&gt;;

        &lt;span class=&quot;n&quot;&gt;try_files&lt;/span&gt; $&lt;span class=&quot;n&quot;&gt;fastcgi_script_name&lt;/span&gt; =&lt;span class=&quot;m&quot;&gt;404&lt;/span&gt;;

        &lt;span class=&quot;n&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;fastcgi_params&lt;/span&gt;;
        &lt;span class=&quot;n&quot;&gt;fastcgi_param&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SCRIPT_FILENAME&lt;/span&gt; $&lt;span class=&quot;n&quot;&gt;document_root&lt;/span&gt;$&lt;span class=&quot;n&quot;&gt;fastcgi_script_name&lt;/span&gt;;
        &lt;span class=&quot;n&quot;&gt;fastcgi_param&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;PATH_INFO&lt;/span&gt; $&lt;span class=&quot;n&quot;&gt;path_info&lt;/span&gt;;
        &lt;span class=&quot;n&quot;&gt;fastcgi_param&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HTTPS&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;on&lt;/span&gt;;

        &lt;span class=&quot;n&quot;&gt;fastcgi_param&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;modHeadersAvailable&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;true&lt;/span&gt;;         &lt;span class=&quot;c&quot;&gt;# Avoid sending the security headers twice
&lt;/span&gt;        &lt;span class=&quot;n&quot;&gt;fastcgi_param&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;front_controller_active&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;true&lt;/span&gt;;     &lt;span class=&quot;c&quot;&gt;# Enable pretty urls
&lt;/span&gt;        &lt;span class=&quot;n&quot;&gt;fastcgi_pass&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;php&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;handler&lt;/span&gt;;

        &lt;span class=&quot;n&quot;&gt;fastcgi_intercept_errors&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;on&lt;/span&gt;;
        &lt;span class=&quot;n&quot;&gt;fastcgi_request_buffering&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;off&lt;/span&gt;;

        &lt;span class=&quot;n&quot;&gt;fastcgi_max_temp_file_size&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;;
    }

    &lt;span class=&quot;c&quot;&gt;# Serve static files
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;location&lt;/span&gt; ~ \.(?:&lt;span class=&quot;n&quot;&gt;css&lt;/span&gt;|&lt;span class=&quot;n&quot;&gt;js&lt;/span&gt;|&lt;span class=&quot;n&quot;&gt;mjs&lt;/span&gt;|&lt;span class=&quot;n&quot;&gt;svg&lt;/span&gt;|&lt;span class=&quot;n&quot;&gt;gif&lt;/span&gt;|&lt;span class=&quot;n&quot;&gt;ico&lt;/span&gt;|&lt;span class=&quot;n&quot;&gt;jpg&lt;/span&gt;|&lt;span class=&quot;n&quot;&gt;png&lt;/span&gt;|&lt;span class=&quot;n&quot;&gt;webp&lt;/span&gt;|&lt;span class=&quot;n&quot;&gt;wasm&lt;/span&gt;|&lt;span class=&quot;n&quot;&gt;tflite&lt;/span&gt;|&lt;span class=&quot;n&quot;&gt;map&lt;/span&gt;|&lt;span class=&quot;n&quot;&gt;ogg&lt;/span&gt;|&lt;span class=&quot;n&quot;&gt;flac&lt;/span&gt;)$ {
        &lt;span class=&quot;n&quot;&gt;try_files&lt;/span&gt; $&lt;span class=&quot;n&quot;&gt;uri&lt;/span&gt; /&lt;span class=&quot;n&quot;&gt;index&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;php&lt;/span&gt;$&lt;span class=&quot;n&quot;&gt;request_uri&lt;/span&gt;;
        &lt;span class=&quot;c&quot;&gt;# HTTP response headers borrowed from Nextcloud `.htaccess`
&lt;/span&gt;        &lt;span class=&quot;n&quot;&gt;add_header&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Cache&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;Control&lt;/span&gt;                     &lt;span class=&quot;s2&quot;&gt;&quot;public, max-age=15778463$asset_immutable&quot;&lt;/span&gt;;
        &lt;span class=&quot;n&quot;&gt;add_header&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Referrer&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;Policy&lt;/span&gt;                   &lt;span class=&quot;s2&quot;&gt;&quot;no-referrer&quot;&lt;/span&gt;       &lt;span class=&quot;n&quot;&gt;always&lt;/span&gt;;
        &lt;span class=&quot;n&quot;&gt;add_header&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;X&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;Content&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;Type&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;Options&lt;/span&gt;            &lt;span class=&quot;s2&quot;&gt;&quot;nosniff&quot;&lt;/span&gt;           &lt;span class=&quot;n&quot;&gt;always&lt;/span&gt;;
        &lt;span class=&quot;n&quot;&gt;add_header&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;X&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;Frame&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;Options&lt;/span&gt;                   &lt;span class=&quot;s2&quot;&gt;&quot;SAMEORIGIN&quot;&lt;/span&gt;        &lt;span class=&quot;n&quot;&gt;always&lt;/span&gt;;
        &lt;span class=&quot;n&quot;&gt;add_header&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;X&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;Permitted&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;Cross&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;Domain&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;Policies&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;none&quot;&lt;/span&gt;              &lt;span class=&quot;n&quot;&gt;always&lt;/span&gt;;
        &lt;span class=&quot;n&quot;&gt;add_header&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;X&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;Robots&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;Tag&lt;/span&gt;                      &lt;span class=&quot;s2&quot;&gt;&quot;noindex, nofollow&quot;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;always&lt;/span&gt;;
        &lt;span class=&quot;n&quot;&gt;add_header&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;X&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;XSS&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;Protection&lt;/span&gt;                  &lt;span class=&quot;s2&quot;&gt;&quot;1; mode=block&quot;&lt;/span&gt;     &lt;span class=&quot;n&quot;&gt;always&lt;/span&gt;;
        &lt;span class=&quot;n&quot;&gt;access_log&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;off&lt;/span&gt;;     &lt;span class=&quot;c&quot;&gt;# Optional: Don&apos;t log access to assets
&lt;/span&gt;    }

    &lt;span class=&quot;n&quot;&gt;location&lt;/span&gt; ~ \.(&lt;span class=&quot;n&quot;&gt;otf&lt;/span&gt;|&lt;span class=&quot;n&quot;&gt;woff2&lt;/span&gt;?)$ {
        &lt;span class=&quot;n&quot;&gt;try_files&lt;/span&gt; $&lt;span class=&quot;n&quot;&gt;uri&lt;/span&gt; /&lt;span class=&quot;n&quot;&gt;index&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;php&lt;/span&gt;$&lt;span class=&quot;n&quot;&gt;request_uri&lt;/span&gt;;
        &lt;span class=&quot;n&quot;&gt;expires&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;d&lt;/span&gt;;         &lt;span class=&quot;c&quot;&gt;# Cache-Control policy borrowed from `.htaccess`
&lt;/span&gt;        &lt;span class=&quot;n&quot;&gt;access_log&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;off&lt;/span&gt;;     &lt;span class=&quot;c&quot;&gt;# Optional: Don&apos;t log access to assets
&lt;/span&gt;    }

    &lt;span class=&quot;c&quot;&gt;# Rule borrowed from `.htaccess`
&lt;/span&gt;    &lt;span class=&quot;n&quot;&gt;location&lt;/span&gt; /&lt;span class=&quot;n&quot;&gt;remote&lt;/span&gt; {
        &lt;span class=&quot;n&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;301&lt;/span&gt; /&lt;span class=&quot;n&quot;&gt;remote&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;php&lt;/span&gt;$&lt;span class=&quot;n&quot;&gt;request_uri&lt;/span&gt;;
    }

    &lt;span class=&quot;n&quot;&gt;location&lt;/span&gt; / {
        &lt;span class=&quot;n&quot;&gt;try_files&lt;/span&gt; $&lt;span class=&quot;n&quot;&gt;uri&lt;/span&gt; $&lt;span class=&quot;n&quot;&gt;uri&lt;/span&gt;/ /&lt;span class=&quot;n&quot;&gt;index&lt;/span&gt;.&lt;span class=&quot;n&quot;&gt;php&lt;/span&gt;$&lt;span class=&quot;n&quot;&gt;request_uri&lt;/span&gt;;
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;After changing the config restart &lt;em&gt;nginx&lt;/em&gt; and &lt;em&gt;php-fpm83&lt;/em&gt;&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;rc-service php-fpm83 restart
rc-service nginx restart
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;fix-owner&quot;&gt;Fix owner&lt;/h4&gt;

&lt;p&gt;For me it was necessary to update the owner of some folders that were changed to root user after the upgrade (or were root before the upgrade)&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;chown &lt;/span&gt;nginx:nginx /run/nextcloud
&lt;span class=&quot;nb&quot;&gt;chown&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-R&lt;/span&gt; nextcloud:www-data /usr/share/webapps/nextcloud
&lt;span class=&quot;nb&quot;&gt;chown &lt;/span&gt;nextcloud:www-data /etc/nextcloud/config.php

&lt;span class=&quot;nb&quot;&gt;chown&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-R&lt;/span&gt; nginx:www-data /var/lib/nextcloud
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 id=&quot;nextcloud-hub-29-to-30&quot;&gt;Nextcloud Hub 29 to 30&lt;/h2&gt;

&lt;h4 id=&quot;occ-1&quot;&gt;OCC&lt;/h4&gt;

&lt;p&gt;Ensure to use the occ from the latest version&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;apk add nextcloud30
apk add nextcloud30-occ

&lt;span class=&quot;c&quot;&gt;#ensure to use the new occ version&lt;/span&gt;
which occ
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;additional-php-packages&quot;&gt;Additional php packages&lt;/h4&gt;

&lt;p&gt;When updating to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nextcloud30&lt;/code&gt; additional php packages are needed&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;apk add php83-pecl-imagick php83-exif php83-sodium php83-sysvsem
rc-service php-fpm83 restar
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;cron-jobs-not-running&quot;&gt;Cron-Jobs not running&lt;/h4&gt;

&lt;p&gt;If you run into issues that the cron jobs are not running regularily after the update check your configured cron-tabs&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;crontab &lt;span class=&quot;nt&quot;&gt;-e&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;# It should contain these entries&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;/5  &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;  &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;  &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;  &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-u&lt;/span&gt; nextcloud php83 &lt;span class=&quot;nt&quot;&gt;-f&lt;/span&gt; /usr/share/webapps/nextcloud/cron.php
0 2 &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-u&lt;/span&gt; nextcloud occ integrity:check-core &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; /var/log/nextcloud-integrity.log 2&amp;gt;&amp;amp;1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</description>
        <pubDate>Sat, 25 Jan 2025 23:00:00 +0000</pubDate>
        <link>https://maocypher.github.io/blog/2025-01-26-update-nextcloud-proxmox/</link>
        <guid isPermaLink="true">https://maocypher.github.io/blog/2025-01-26-update-nextcloud-proxmox/</guid>
      </item>
    

    
      
        
      
    
      
    
      
        
          <item>
            <title></title>
            <description>&lt;h3&gt;   &lt;/h3&gt;

&lt;div id=&quot;categories&quot;&gt;

  &lt;div class=&quot;category-box&quot;&gt;
    
    &lt;div id=&quot;#homelab&quot;&gt;&lt;/div&gt;
    &lt;h4 class=&quot;category-head&quot;&gt;&lt;a href=&quot;/blog/categories/homelab&quot;&gt;homelab&lt;/a&gt;&lt;/h4&gt;
    &lt;a name=&quot;homelab&quot;&gt;&lt;/a&gt;
     
    &lt;article class=&quot;center&quot;&gt;
      &lt;h6&gt;&lt;a href=&quot;/blog/2025-12-31-save-nextcloud-data-when-backup-too-big/&quot;&gt;Save Nextcloud data when Proxmox backup is too big to be restored&lt;/a&gt;&lt;/h6&gt;
    &lt;/article&gt;


    
    &lt;article class=&quot;center&quot;&gt;
      &lt;h6&gt;&lt;a href=&quot;/blog/2025-01-26-update-nextcloud-proxmox/&quot;&gt;Updating Nextcloud on Proxmox LXC with Alpine Linux&lt;/a&gt;&lt;/h6&gt;
    &lt;/article&gt;


    

  &lt;/div&gt;

&lt;/div&gt;

</description>
            <link>https://maocypher.github.io/blog/categories/</link>
          </item>
        
      
    
      
    
      
        
          <item>
            <title>Guides</title>
            <description>&lt;h5&gt; Posts by Category : {{ page.title }} &lt;/h5&gt;

&lt;div class=&quot;card&quot;&gt;
{% for post in site.categories.guides %}
 &lt;li class=&quot;category-posts&quot;&gt;&lt;span&gt;{{ post.date | date_to_string }}&lt;/span&gt; &amp;nbsp; &lt;a href=&quot;{{ post.url }}&quot;&gt;{{ post.title }}&lt;/a&gt;&lt;/li&gt;
{% endfor %}
&lt;/div&gt;</description>
            <link>https://maocypher.github.io/blog/categories/guides/</link>
          </item>
        
      
    
      
    
      
    
      
        
          <item>
            <title>Get Started</title>
            <description>## Getting Started - How to use “devlopr-jekyll” theme

## What&apos;s Jekyll ?

If you aren’t familiar with Jekyll yet, you should know that it is a static site generator. It will transform your plain text into static websites and blogs. No more databases, slow loading websites, risk of being hacked…just your content. And not only that, with Jekyll you get free hosting with GitHub Pages! If you are a beginner we recommend you start with [Jekyll’s Docs](https://jekyllrb.com/docs/installation/). Now, if you know how to use Jekyll, let’s move on to using this theme in Jekyll:

## Watch Tutorial

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/cXBEfpn0qrg?rel=0&amp;amp;controls=0&amp;amp;showinfo=0&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen&gt;&lt;/iframe&gt;


### Steps to create your blog using devlopr-jekyll and Host using Github Pages :

&gt;  **Step 1.**  Fork the repo - [click here](https://github.com/sujaykundu777/devlopr-jekyll/fork)

![Devlopr Jekyll Repo](/assets/img/posts/fork1.PNG){:class=&quot;img-fluid&quot;}

&gt; **Step 2.** Use **your-github-username.github.io** as the new repo  ( Replace your-github-username with yours). Remember if you use the name other than your-github-username.github.io , your blog will be built using gh-pages branch.

![Devlopr Jekyll Repo](/assets/img/posts/fork2.PNG){:class=&quot;img-fluid&quot;}

![Devlopr Jekyll Repo](/assets/img/posts/fork3.PNG){:class=&quot;img-fluid&quot;}

&gt; **Step 3.** Clone the new repo locally to make changes :

![Devlopr Jekyll Repo](/assets/img/posts/fork31.PNG){:class=&quot;img-fluid&quot;}

![Devlopr Jekyll Repo](/assets/img/posts/fork32.PNG){:class=&quot;img-fluid&quot;}

![Devlopr Jekyll Repo](/assets/img/posts/fork33.PNG){:class=&quot;img-fluid&quot;}

```bash
 $ git clone https://github.com/yourusername/yourusername.github.io
 $ cd yourusername.github.io
 $ code .
```

&gt; **Step 4.** Open the files using VSCode and edit _config.yml and edit with your details:

- _config.yml file - replace with your own details
- _posts - Add your blog posts here
- _includes - You can replace the contents of the files with your data. (contains widgets)
- _assets/img - Add all your images here

![Devlopr Jekyll Repo](/assets/img/posts/fork34.PNG){:class=&quot;img-fluid&quot;}

&gt; **Step 5** - Install the development requirements:

### Set up local development environment

1. [Git](https://git-scm.com/)
2. [Ruby](https://www.ruby-lang.org/) and [Bundler](https://bundler.io/)
3. [VSCode](https://code.visualstudio.com/download)

We need ruby and bundler to build our site locally. After installation check if its working:

For ruby :

```bash
$ ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux-gnu]
```
For bundler :

```bash
$ gem install bundler
$ bundler -v
Bundler version 2.2.29
```
Add jekyll :

```bash
$ bundle update
$ bundle add jekyll
```
 This command will add the Jekyll gem to our Gemfile and install it to the ./vendor/bundle/ folder.

You can check the jekyll version

```
$ bundle exec jekyll -v
jekyll 4.2.0
```

&gt; **Step 6.** Install the gem dependencies by running the following command

```bash
$ bundle update
$ bundle install
```

&gt; **Step 7.** Serve the site locally by running the following command below:

```bash
$ bundle exec jekyll serve --watch
```
or you can also serve using :

```bash
$ jekyll serve
```

Visit [http://localhost:4000](http://localhost:4000) for development server

![Devlopr Jekyll Repo](/assets/img/posts/fork41.PNG){:class=&quot;img-fluid&quot;}


### Adding Content

Start populating your blog by adding your .md files in _posts. devlopr-jekyll already has a few examples.

#### YAML Post Example:

```yml
---
layout: post
title: Sample Post
author: Sujay Kundu
date: &apos;2019-05-21 14:35:23 +0530&apos;
category:
        - jekyll
summary: This is the summary for the sample post
thumbnail: sample.png
---

Hi ! This is sample post.

```

#### YAML Page Example:

```yml
---
layout: page
title: Sample Page
permalink: /sample-page/
---

Hi ! This is sample page.
```

#### Editing stylesheet

You’ll only work with a single file to edit/add theme style: assets/css/main.scss.

### Deploy your Changes

Once happy with your blog changes. Push your changes to master branch.

&gt; **Step 8.** Push Your Local Changes

```bash
 $ git add .
 $ git commit -m &quot;my new blog using devlopr-jekyll&quot;
 $ git push origin master
```

Visit your Github Repo settings ! Enable master branch as Github Pages Branch :

![Devlopr Jekyll Repo](/assets/img/posts/fork6.PNG){:class=&quot;img-fluid&quot;}

&gt; **Step 9.** Deploy your Blog :

![Devlopr Jekyll Repo](/assets/img/posts/fork7.PNG){:class=&quot;img-fluid&quot;}

&gt; Congrats ! On your new shining Blog !

You can visit the blog using [http://your-github-username.github.io](http://your-github-username.github.io).

</description>
            <link>https://maocypher.github.io/get-started/</link>
          </item>
        
      
    
      
        
          <item>
            <title>Jekyll</title>
            <description>&lt;h5&gt; Posts by Category : {{ page.title }} &lt;/h5&gt;

&lt;div class=&quot;card&quot;&gt;
{% for post in site.categories.jekyll %}
 &lt;li class=&quot;category-posts&quot;&gt;&lt;span&gt;{{ post.date | date_to_string }}&lt;/span&gt; &amp;nbsp; &lt;a href=&quot;{{ post.url }}&quot;&gt;{{ post.title }}&lt;/a&gt;&lt;/li&gt;
{% endfor %}
&lt;/div&gt;</description>
            <link>https://maocypher.github.io/blog/categories/jekyll/</link>
          </item>
        
      
    
      
    
      
        
          <item>
            <title>Guides</title>
            <description>&lt;h5&gt; Posts by Category : {{ page.title }} &lt;/h5&gt;

&lt;div class=&quot;card&quot;&gt;
{% for post in site.categories.sample_category %}
 &lt;li class=&quot;category-posts&quot;&gt;&lt;span&gt;{{ post.date | date_to_string }}&lt;/span&gt; &amp;nbsp; &lt;a href=&quot;{{ post.url }}&quot;&gt;{{ post.title }}&lt;/a&gt;&lt;/li&gt;
{% endfor %}
&lt;/div&gt;</description>
            <link>https://maocypher.github.io/blog/categories/sample_category/</link>
          </item>
        
      
    
      
    
      
        
          <item>
            <title>Security Policy</title>
            <description># Security Policy

## Supported Versions

Use this section to tell people about which versions of your project are
currently being supported with security updates.

| Version | Supported          |
| ------- | ------------------ |
| 5.1.x   | :white_check_mark: |
| 5.0.x   | :x:                |
| 4.0.x   | :white_check_mark: |
| &lt; 4.0   | :x:                |

## Reporting a Vulnerability

Use this section to tell people how to report a vulnerability.

Tell them where to go, how often they can expect to get an update on a
reported vulnerability, what to expect if the vulnerability is accepted or
declined, etc.
</description>
            <link>https://maocypher.github.io/SECURITY/</link>
          </item>
        
      
    
      
        
          <item>
            <title>Change Log</title>
            <description># Change Log

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/).

**Note that references to the Font-Awesome-Pro repository refer to a GitHub
repository that is by invitation only. You will get a 404 - Not Found if you do
not have access**

---

## [5.1.0](https://github.com/FortAwesome/Font-Awesome-Pro/releases/tag/5.1.0)  - 2018-06-20

**Minor version upgrade notice: there are some backward-incompatible changes to this release. See the
[UPGRADING.md guide](https://github.com/FortAwesome/Font-Awesome/blob/master/UPGRADING.md) for more
information.**

### Added
* New Emoji, Design, and Travel category pack
* Another group of requested and commissioned icons
* Version 4 shim for Web Fonts with CSS
* New simplified download and NPM packages
* @fortawesome/fontawesome-free and @fortawesome/fontawesome-pro NPM packages that match what&apos;s available in the CDN and .ZIP files
* Brand icons rev, nimblr, megaport, mailchimp, hornbill, wix, weebly, themeco, squarespace, aws, shopware
* API method toHtml() for converting abstract objects to HTML
* API method counter() to generate Layers Counters
* API method watch() to configure MutationObserver and watch DOM for icon changes and additions

### Changed
* Relocating sponsor data to a separate sponsors.yml
* Updated teamspeak brand icon
* No more default exports in the CommonJS/ES packages (anything installed from NPM)
* Greatly improved performance and rendering of CSS pseudo-elements with SVG and JavaScript
* Configuration of SVG with JavaScript can now be done with attributes on the script tag
* SVG with JavaScript pseudo-elements now match syntax (font-family, font-weight) of Web Fonts with CSS

### Fixed
* Tree shaking of all NPM packages by default
* Alignment of the book-open and dice-six icon
* Correcting creative-commons
* Incorrect license on the fontawesome-common-types package
* Improve ligatures that share a base name with another ligature
* Correcting solid style of the digital-tachograph icon
* Prevent duplicating classes in some scenarios with SVG with JavaScript
* Duplicate insertion of CSS when insertCss() method was called
* Missing TypeScript definitions for the free-brands-svg-icons package

---

## [5.0.13](https://github.com/FortAwesome/Font-Awesome/releases/tag/5.0.13)  - 2018-05-10

### Added
* 68 icons to Free and 165 to Pro of the most requested icons in Font Awesome

---

## [5.0.12](https://github.com/FortAwesome/Font-Awesome/releases/tag/5.0.12)  - 2018-05-03

### Added
* A long time ago in a galaxy far, far away some icons were added

### Fixed
* Renamed the r brand to r-project to prevent ligature collision with the &quot;r&quot; glyph

---

## [5.0.11](https://github.com/FortAwesome/Font-Awesome/releases/tag/5.0.11)  - 2018-05-01

### Added
* 16 new user icons
* Full set of Creative Commons symbols
* Regular style comment-dots used for v4 comment-alt in shim
* Top 6 brand icons: r, ebay, mastodon, researchgate, keybase, teamspeak

### Changed
* Revised slider icons FortAwesome/Font-Awesome#11872
* Make desktop typeface easier to find in apps that support ligature previews

### Fixed
* Remove errant XML entity from the lastfm-square icon FortAwesome/Font-Awesome#12847
* Correcting paths in cloud icons FortAwesome/Font-Awesome-Pro#920

---

## [5.0.10](https://github.com/FortAwesome/Font-Awesome/releases/tag/5.0.10)  - 2018-04-10

### Added
* New java brand icon FortAwesome/Font-Awesome#386

### Changed
* Updating depth of dna icon
* Updating pied-piper, adding pied-piper-hat

### Fixed
* Correcting path errors on readme icon FortAwesome/Font-Awesome#12754
* Light style of lamp icon FortAwesome/Font-Awesome#12725

---

## [5.0.9](https://github.com/FortAwesome/Font-Awesome/releases/tag/5.0.9)  - 2018-03-27

### Added
* New Chat icon pack and category
* New Charity icon pack and category
* New Moving icon pack and category
* New icons hands and hand-holding

### Changed
* Updated flipboard, readme, and houzz brand icon
* Making all solid icons in the medical icon pack free
* Updated hand-holding-box and hand-receiving in the Light style

### Fixed
* Missing box-sizing CSS property for fa-layers-counter

---

## [5.0.8](https://github.com/FortAwesome/Font-Awesome/releases/tag/5.0.8)  - 2018-03-01

### Fixed
* OTF font files missing ligatures for Pro styles FortAwesome/Font-Awesome#12486 FortAwesome/Font-Awesome-Pro#1034

---

## [5.0.7](https://github.com/FortAwesome/Font-Awesome/releases/tag/5.0.7)  - 2018-02-26

### Added
* New Logistics category
* New Medical category
* Individual SVG files available from the Font Awesome CDN
* Additional search terms

### Changed
* Apple brand icon update FortAwesome/Font-Awesome#12337
* Disable mutation observers with fontawesome.noAuto() is called
* License information now references https URL scheme

### Fixed
* Missing TypeScript names FortAwesome/react-fontawesome#83
* Adding categories metadata FortAwesome/Font-Awesome#12034
* TypeScript improvement for fontawesome.layer()
* Correcting a melting, wobbling, weird-looking whistle

---

## [5.0.6](https://github.com/FortAwesome/Font-Awesome/releases/tag/5.0.6)  - 2018-01-25

### Fixed
* @fortawesome/fontawesome-pro-light missing submodules

---

## [5.0.5](https://github.com/FortAwesome/Font-Awesome-Pro/releases/tag/5.0.5)  - 2018-01-25

### Added
* New Sports category
* New Chess category
* Added brand icons for flipboard, php, quinscape, and hips

### Fixed
* Sass and Less mixin fa-icon() now uses ems instead of percentage
* Corrected misspelling of &quot;Alternate&quot; in category labels
* Improved TypeScript definitions for @fortawesome/fontawesome
* Server-side rendering was failing due to DOM-specific object access
* SVG attributes &quot;data-fa-processed&quot; renamed to &quot;data-fa-i2svg&quot;, only applies if rendered with i2svg() method

---

## [5.0.4](https://github.com/FortAwesome/Font-Awesome-Pro/releases/tag/5.0.4)  - 2018-01-10

### Changed
* Updating all NPM package READMEs

### Fixed
* Improving TypeScript exports and fixing some incorrect definitions
* TypeScript error when importing entire style Fort-Awesome/Font-Awesome#12072
* Pseudo-elements erasing text contents in parent container Fort-Awesome/Font-Awesome-Pro#11995
* fa-layers-text misalignment when using Bootstrap Fort-Awesome/Font-Awesome#11871

---

## [5.0.3](https://github.com/FortAwesome/Font-Awesome-Pro/releases/tag/5.0.3)  - 2018-01-08

### Added
* Adding elementor, youtube-square brand icons
* Adding window-minimize to the Free subset
* TypeScript support for all NPM packages

### Fixed
* Corrected uneven spacing in university, address-book, address-card, id-badge, id-card, mouse-pointer, phone-volume, portrait, user-alt, user-circle, user-md, user-plus, user-times, user , users
* Corrected uneven spacing in brand icons behance-square, dashcube, discourse, ember, erlang, fort-awesome, js-square, laravel, mix, patreon, palfed, phoenix-framework, node-js, skyatlas, stack-exchange, stripe, viber, weixin, yahoo , yoast

---

## [5.0.2](https://github.com/FortAwesome/Font-Awesome-Pro/releases/tag/5.0.2)  - 2017-12-19

### Added
* Adding amazon-pay, cc-amazon-pay, korvue, ethereum brand icons
* Adding stopwatch to Free version

### Changed
* Ligatures now support capital case, all caps, and title case

### Fixed
* NPM packages now behave the same way as CDN and browser-specific packages FortAwesome/Font-Awesome-Pro#727 FortAwesome/Font-Awesome-Pro#896 FortAwesome/Font-Awesome-Pro#891
* Icon doesn&apos;t change when pseudo-element content changes FortAwesome/Font-Awesome-Pro#839
* Invalid XML in sprites FortAwesome/Font-Awesome-Pro#927
* Incorrect version in Sass and Less variable files

---

## [5.0.1](https://github.com/FortAwesome/Font-Awesome-Pro/releases/tag/5.0.1)  - 2017-12-08

### Added
* Adding font-awesome-flag, lock-open, redo-alt, sync-alt, undo-alt to the Free version
* New NPM packages `fontawesome-free-webfonts` and `fontawesome-pro-webfonts`
* Adding old icon names to search terms for renamed icons
* Extensive metadata added to the `advanced-options` directory
* Adding stripe-s brand icon
* Adding typo3 brand icon

### Changed
* Updated dropbox brand icon to match new branding guidelines
* Updated firefox brand icon
* Updated strava brand icon
* OTF font file now include a space character

### Fixed
* OTF font file now supports different styles in Windows
* OTF font file &quot;j&quot; character now has correct space on the right
* Modifying the `class` attribute on an existing `&lt;svg&gt;` allows you to change the icon

---

## [5.0.0](https://github.com/FortAwesome/Font-Awesome-Pro/releases/tag/5.0.0)  - 2017-12-01

### Added
* License information

### Changed
* CSS vertical-align now &quot;em&quot;-based instead of percentage making it more consistent
* fa-ul width now closer to default browser size

---

## [5.0.0-rc5](https://github.com/FortAwesome/Font-Awesome-Pro/releases/tag/5.0.0-rc5)  - 2017-11-28

**This release includes breaking changes**

### Added
* Brand icons: gitter, cc-stripe, stripe, hooli, aviato, strava, ember, angular, font-awesome-flag
* Icons compress-alt and expand-alt
* Adding calendar to Font Awesome 5 Free
* SASS function that makes it easier to use variables FortAwesome/Font-Awesome-Pro#824

### Changed
* BREAKING Renamed icon composition to mask (&quot;data-fa-compose&quot; becomes &quot;data-fa-mask&quot;)
* BREAKING Re-organized directory structure to match upcoming documentation
* BREAKING Font Awesome styles inserted into the `&lt;head&gt;` will now precede other link and style definitions
* BREAKING `fontawesome.text` and `fontawesome.icon` now use `styles` param instead of `style`
* Updated sizing for twitter, discord, youtube
* Class fa-li now respects line-height and has new recommended markup (see included docs)

### Fixed
* Duplicate `style` tags being added in the head FortAwesome/Font-Awesome-Pro#858
* Error with icon composition/masking that caused a confusing error message
* An error when using pseudo elements and the element is empty (Array.reduce error)
* Icons not being replaced with SVG if the text content is not empty

---

## [5.0.0-rc4](https://github.com/FortAwesome/Font-Awesome-Pro/releases/tag/5.0.0-rc4)  - 2017-10-27

### Added
* Ligature support in the OTF font
* Vue.js brand icon
* Sass and Less brand icons
* Autoprefixer brand icon
* Individual icon imports in icon packages FortAwesome/Font-Awesome-Pro#808

### Changed
* Better poo eyes
* Renamed HTML status classes to `fontawesome-i2svg-active`, `fontawesome-i2svg-pending`, `fontawesome-i2svg-complete`
* HTML status class for active is added only after the first batch of icon replacements occur
* Added mention of newer versions of iOS in documentation FortAwesome/Font-Awesome-Pro#810

### Fixed
* Performance and missing features with mutation observer (should fix FortAwesome/Font-Awesome-Pro#813)
* Incorrect handling of icon class and style attributes when using autoReplace = &apos;nest&apos; FortAwesome/Font-Awesome-Pro#809
* Pseudo elements not added or removed when class mutations occur FortAwesome/Font-Awesome-Pro#821

---

## [5.0.0-rc3](https://github.com/FortAwesome/Font-Awesome-Pro/releases/tag/5.0.0-rc3)  - 2017-10-13

### Added
* Node.js brand icon FortAwesome/Font-Awesome-Pro#779
* React brand icon FortAwesome/Font-Awesome-Pro#780
* OSI brand icon FortAwesome/Font-Awesome-Pro#748
* Add a class to the html element when icon replacement is complete FortAwesome/Font-Awesome-Pro#778
* Add support for symbols in API including ability to name the symbol
* Use CSS pseudo elements (:before and :after) to make trigger SVG replacements

### Changed
* Switched the locations of fork and knife in utensils-alt FortAwesome/Font-Awesome-Pro#466
* Updated the AWS brand icon FortAwesome/Font-Awesome-Pro#735
* Updated Apple App Store icon FortAwesome/Font-Awesome-Pro#728

### Fixed
* Do not throw an error if icon is missing when calling icon() method in API
* Ensure that unicode values do not change between releases
* Version field is missing in fontawesome-pro-brands/package.json FortAwesome/Font-Awesome-Pro#781
* Repeated commenting out of fa-layers when i2svg is called FortAwesome/Font-Awesome-Pro#788
* Title not showing up correctly for SVG FortAwesome/Font-Awesome-Pro#786

---

## [5.0.0-rc2](https://github.com/FortAwesome/Font-Awesome-Pro/releases/tag/5.0.0-rc2)  - 2017-09-22

### Added
* Brand icons: accusoft, ns8, uniregistry

### Fixed
* Link to the npm package in the docs FortAwesome/Font-Awesome-Pro#729
* Incorrect reference to fontawesome-pro.js in docs

---

## [5.0.0-rc1](https://github.com/FortAwesome/Font-Awesome-Pro/releases/tag/5.0.0-rc1)  - 2017-09-15

### Changed
* New Bitbucket logo FortAwesome/Font-Awesome-Pro#720
* Modifed the star icons to match use case better FortAwesome/Font-Awesome-Pro#710
* Switched names of css3 and css3-alt to reflect correct branding

### Fixed
* Correct whitespace with the Visa logo FortAwesome/Font-Awesome-Pro#719
* Improve OTF support by passing through FontForge FortAwesome/Font-Awesome-Pro#565
* Fonts with &quot;undefined&quot; name FortAwesome/Font-Awesome-Pro#711
* Shims will only function if using old prefix of &quot;fa&quot; FortAwesome/Font-Awesome-Pro#692
* Added missing &quot;youtube&quot; icon to categories

---

## [5.0.0-beta7](https://github.com/FortAwesome/Font-Awesome-Pro/releases/tag/5.0.0-beta7)  - 2017-09-11

### Added
* Ability to nest the `&lt;svg&gt;` tag within the `&lt;i&gt;` FortAwesome/Font-Awesome-Pro#624
* Define icons as symbols and leverage SVG sprites FortAwesome/Font-Awesome-Pro#629
* Added alternative CSS3 logo FortAwesome/Font-Awesome-Pro#682

### Changed
* Power Transforms now execute inside the SVG instead of on the root element
* Filenames have changed to reflect a better division between Font Awesome Free and Pro

### Fixed
* More improvements to the version 4 shim FortAwesome/Font-Awesome-Pro#673 FortAwesome/Font-Awesome-Pro#678 FortAwesome/Font-Awesome-Pro#686 FortAwesome/Font-Awesome-Pro#687 FortAwesome/Font-Awesome-Pro#692
* Animation support for inline SVG now works as expected FortAwesome/Font-Awesome-Pro#662

---

## [5.0.0-beta6](https://github.com/FortAwesome/Font-Awesome-Pro/releases/tag/5.0.0-beta6)  - 2017-09-01

### Added
* Ability to flip horizontal and vertical with CSS classes fa-flip-horizontal and fa-flip-vertical
* New film-alt icon that allows for layering other icons
* Microsoft brand

### Changed
* New YouTube branding FortAwesome/Font-Awesome-Pro#646

### Fixed
* Fixed a bunch of shim-related issues
* Cogs off center FortAwesome/Font-Awesome-Pro#663
* Corrected icons/categories.yml with canonical names

---

## [5.0.0-beta5](https://github.com/FortAwesome/Font-Awesome-Pro/releases/tag/5.0.0-beta5)  - 2017-08-25

### Added
* Full parity with Font Awesome 4! 616 total core icons in each style
* 297 total brand and logo icons
* Separate CSS file to accompany the SVG Framework FortAwesome/Font-Awesome-Pro#627
* Alternative to the dots icon FortAwesome/Font-Awesome-Pro#608
* Made window icons consistent FortAwesome/Font-Awesome-Pro#611

### Fixed
* Production builds not correctly being detected FortAwesome/Font-Awesome-Pro#631

---

## [5.0.0-beta4](https://github.com/FortAwesome/Font-Awesome-Pro/releases/tag/5.0.0-beta4)  - 2017-08-18

### Added
* 590 total core icons in each style
* 291 total brand and logo icons

### Fixed
* Reduced the size of JS file from 66 to 22 kb
* Regression caused by with web font alignment FortAwesome/Font-Awesome-Pro#460

---

## [5.0.0-beta3](https://github.com/FortAwesome/Font-Awesome-Pro/releases/tag/5.0.0-beta3)  - 2017-08-15

### Added
* 583 total core icons in each style

### Fixed
* Documentation improvements and fixes FortAwesome/Font-Awesome-Pro#586
* Vertical alignment of TTF and OTF fonts FortAwesome/Font-Awesome-Pro#460
* The &quot;fa_500px&quot; icon should be named &quot;fa500px&quot; FortAwesome/Font-Awesome-Pro#578

---

## [5.0.0-beta2](https://github.com/FortAwesome/Font-Awesome-Pro/releases/tag/5.0.0-beta2)  - 2017-08-11

### Added
* 570 total core icons in each style
* 291 total brand and logo icons
* NPM (ES6, CommonJS, AMD) packages for use with other JavaScript libraries and tools FortAwesome/Font-Awesome-Pro#574
* Added a guide to choosing which implementation is best for you FortAwesome/Font-Awesome-Pro#532

### Changed
* Showing a missing icon is now configurable FortAwesome/Font-Awesome-Pro#569

### Fixed
* Composition framework now works in browsers that do not support transform-origin FortAwesome/Font-Awesome-Pro#564

---

## [5.0.0-beta1](https://github.com/FortAwesome/Font-Awesome-Pro/releases/tag/5.0.0-beta1)  - 2017-08-04

### Added
* 524 total core icons in each style
* 289 total brand and logo icons
* New composition framework FortAwesome/Font-Awesome-Pro#537
* Animated indicator if you use an icon that does not exist

### Changed
* Basic linting for Sass and Less files
* Add JavaScript guard block to prevent leaking errors
* Add support for automatic accessibility to SVG Framework Layers

### Fixed
* Regression where stacks and pulled and bordered were not working in SVG Framework
* SVG sprite example had confusing inline styles FortAwesome/Font-Awesome-Pro#549
* Make getting started page more consistent between examples FortAwesome/Font-Awesome-Pro#544
* Added missing sizes fa-[6-10], xs, sm FortAwesome/Font-Awesome-Pro#546
* Title tag missing in SVG sprites FortAwesome/Font-Awesome-Pro#536

---

## [5.0.0-alpha7](https://github.com/FortAwesome/Font-Awesome-Pro/releases/tag/5.0.0-alpha7)  - 2017-07-28

### Added
* 451 total core icons in each style
* 281 total brand and logo icons
* Less support is back!
* OpenType (.otf) file formats for web fonts

### Changed
* Changes the fa-spin animation to go from 0deg to 360deg to eliminate hitch FortAwesome/Font-Awesome-Pro#522
* Improved mutation handling FortAwesome/Font-Awesome-Pro#517

### Fixed
* fa-fw now works correctly with the SVG framework FortAwesome/Font-Awesome-Pro#530
* Removed execute bit on some icon files FortAwesome/Font-Awesome-Pro#520

---

## [5.0.0-alpha6](https://github.com/FortAwesome/Font-Awesome-Pro/releases/tag/5.0.0-alpha6)  - 2017-07-21

### Added
* 410 total core icons in each style
* 270 total brand and logo icons
* All new Font Awesome 4 shim file
* Beginnings of a public JS API FortAwesome/Font-Awesome-Pro#512

### Changed
* Added Firefox ESR and Chrome for Businesses to browser compatibility FortAwesome/Font-Awesome-Pro#506

### Fixed
* Ensure that SVG title attributes are unique
* Fixed incorrect viewBox sizes FortAwesome/Font-Awesome-Pro#492
* Fix chart-area alignment in the solid style FortAwesome/Font-Awesome-Pro#508
* Add missing xmlns attributes in some SVGs FortAwesome/Font-Awesome-Pro#509

---

## [5.0.0-alpha5](https://github.com/FortAwesome/Font-Awesome-Pro/releases/tag/5.0.0-alpha5)  - 2017-07-14

### Added
* 228 total brand and logo icons
* New transform framework for sizing, moving, rotating, and flipping icons
* New icon counters
* New layers framework
* New text overlays
* Auto-comments with the original source icons alongside SVG replacements

### Changed
* Autoprefixer to correctly add browser prefixes for supported browsers
* Removed browser-specific CSS properties in Sass source files (now relies on autoprefixer)

### Fixed
* The rotation on checkmark icons
* Other icon feedback from previous weeks
* Correct fixed width settings to 1.25em (based on the new 16px grid)
* Icons displaying as block instead of inline-block in IE and older Safari

---

## [5.0.0-alpha4](https://github.com/FortAwesome/Font-Awesome-Pro/releases/tag/5.0.0-alpha4)  - 2017-07-07

### Added
* 93 brand icons

---

## [5.0.0-alpha3](https://github.com/FortAwesome/Font-Awesome-Pro/releases/tag/5.0.0-alpha3)  - 2017-06-30

### Added
* 95 additional icons; including file types, directional, and some existing and new brand icons

### Fixed
* Wrong content type in generated CSS FortAwesome/Font-Awesome-Pro#458
* Removal of query string from static resources FortAwesome/Font-Awesome-Pro#458
* SVG font ID&apos;s are incorrect in webfont implementation FortAwesome/Font-Awesome-Pro#474

---

## [5.0.0-alpha2](https://github.com/FortAwesome/Font-Awesome-Pro/releases/tag/5.0.0-alpha2)  - 2017-06-27

### Added
* How/When to upgrade from FA4 to FA5 FortAwesome/Font-Awesome-Pro#454

### Fixed
* Links to SVG files broken in the example files FortAwesome/Font-Awesome-Pro#456
* Misnamed icon names in examples FortAwesome/Font-Awesome-Pro#445
* Mangled HTML in the Getting Started example FortAwesome/Font-Awesome-Pro#442
* Bad grammar and typos FortAwesome/Font-Awesome-Pro#443
* fas-arrow-to-top is identical to fas-arrow-to-right FortAwesome/Font-Awesome-Pro#423
* Vertical alignment issues with webfont implementation FortAwesome/Font-Awesome-Pro#444
* Add browser compatibility tables to demo FortAwesome/Font-Awesome-Pro#435
* Remove MAC OS feces from builds FortAwesome/Font-Awesome-Pro#437
* TTF naming issues that prevent correct usage/installation FortAwesome/Font-Awesome-Pro#450
* Correct CSS for SVG framework stacking, was reversed from normal FortAwesome/Font-Awesome-Pro#452

---

## [5.0.0-alpha1](https://github.com/FortAwesome/Font-Awesome-Pro/releases/tag/5.0.0-alpha1)  - 2017-06-23

### Added
* 300+ more icons
* Brands pack
* New JavaScript based SVG Framework
* New SVG Sprites based framework
* Source SVGs
* Documentation with a convenient build-in web server

### Changed
* New directory structure
</description>
            <link>https://maocypher.github.io/assets/bower_components/font-awesome/CHANGELOG/</link>
          </item>
        
      
    
      
        
          <item>
            <title>Upgrading Guide</title>
            <description># Upgrading Guide

See the [CHANGELOG.md](/assets/bower_components/font-awesome/CHANGELOG/) for detailed information about what has changed between versions.

This guide is useful to figure out what you need to do between breaking changes.

As always, [submit issues](https://github.com/FortAwesome/Font-Awesome/issues/new) that you run into with this guide or with these upgrades to us.

## 5.0.x to 5.1.0

### New packages available for browser-only integration

**If you were previously using @fortawesome/fontawesome you need to switch to one of the new packages.**

Our Free and Pro CDN provide access to JS, CSS, sprites, and separate SVG files.

We&apos;ve now made these files conveniently available through NPM.

* [@fortawesome/fontawesome-free](https://www.npmjs.com/package/@fortawesome/fontawesome-free)
* @fortawesome/fontawesome-pro (private package, requires Pro subscription)

If you are familiar with the paths and options available with the CDN these
packages should be familiar.

Information about [Font Awesome Pro subscriptions](https://fontawesome.com/pro)
can be found in your [Font Awesome awesome
account](https://fontawesome.com/account/services).

### Renamed packages

The following packages have been renamed as part of 5.1.0 of Font Awesome.

_All packages are in the [@fortawesome NPM scope](https://www.npmjs.com/search?q=scope:fortawesome&amp;page=1&amp;ranking=optimal)_

| Old package(1)            | New package            |
|---------------------------|------------------------|
| fontawesome-free-webfonts | fontawesome-free       |
| fontawesome-pro-webfonts  | fontawesome-pro        |
| fontawesome-free-solid    | free-solid-svg-icons   |
| fontawesome-free-regular  | free-regular-svg-icons |
| fontawesome-free-brands   | free-brands-svg-icons  |
| fontawesome-pro-solid     | pro-solid-svg-icons    |
| fontawesome-pro-regular   | pro-regular-svg-icons  |
| fontawesome-pro-light     | pro-light-svg-icons    |

(1) Old packages have now been deprecated. They are still available but will only receive high priority patch release fixes.

**You&apos;ll need to update your package.json file with the renamed packages and new versions.**

### No more default imports

Recently we spent a good deal of time supporting TypeScript to enable us to
create the Angular Font Awesome component. During that adventure we
[were](https://basarat.gitbooks.io/typescript/docs/tips/defaultIsBad.html)
[convinced](https://blog.neufund.org/why-we-have-banned-default-exports-and-you-should-do-the-same-d51fdc2cf2ad)
that we were going to remove default exports from all of our components,
libraries, and packages. This is complete with the umbrella release of `5.1.0` of Font Awesome.

What does that mean?

~~Old way:~~

```javascript
import fontawesome from &apos;@fortawesome/fontawesome&apos;
import solid from &apos;@fortawesome/fontawesome-free-solid&apos;
import faTwitter from &apos;@fortawesome/fontawesome-free-brands/faTwitter&apos;
import FontAwesomeIcon from &apos;@fortawesome/vue-fontawesome&apos;

library.add(solid, faTwitter)
```

New way:

```javascript
import { library, dom } from &apos;@fortawesome/fontawesome-svg-core&apos;
import { fas } from &apos;@fortawesome/free-solid-svg-icons&apos;
import { faTwitter } from &apos;@fortawesome/free-brands-svg-icons&apos;
import { FontAwesomeIcon } from &apos;@fortawesome/vue-fontawesome&apos;

library.add(fas, faTwitter)

// Kicks off the process of finding &lt;i&gt; tags and replacing with &lt;svg&gt;
dom.watch()
```

This is also a valid way to import icons that works if your tool does not support tree shaking:

```javascript
import { faTwitter } from &apos;@fortawesome/free-brands-svg-icons/faTwitter&apos;
```

### Improved support for tree shaking

Tree shaking is now functional by default and no additional configuration is required to make it work.

The `shakable.es.js` module has been removed and is no longer needed.

If you&apos;ve previously configured tree shaking by modifying your webpack or rollup you can safely remove these.

**We recommend that you check your bundle size after upgrading an ensure that file sizes are as you would expect.**

```javascript
module.exports = {
  // ...
  resolve: {
    alias: {
      &apos;@fortawesome/fontawesome-free-solid$&apos;: &apos;@fortawesome/fontawesome-free-solid/shakable.es.js&apos;
    }
  }
}
```

```javascript
const alias = require(&apos;rollup-plugin-alias&apos;)

rollup({
  // ...
  plugins: [
    alias({
      &apos;@fortawesome/fontawesome-free-solid&apos;: &apos;node_modules/@fortawesome/fontawesome-free-solid/shakable.es.js&apos;
    })
  ]
})
```

## 5.0.11 to 5.0.12

Due to a collision with the &quot;r&quot; glyph the R Project brand icon has been renamed to `r-project`.

## 5.0.x to 5.0.6

### SVG Attribute was changed from data-fa-processed to data-fa-i2svg

As part of a bug fix for the release of 5.0.6 we renamed an attribute that was found on `&lt;svg&gt;` elements from
`data-fa-processed` to `data-fa-i2svg`. We feel this more accurately reflects the intent and purpose.

This attribute is added to any icon that has been generated using `fontawesome.dom.i2svg()`.

Be aware that `data-fa-i2svg` (or `data-fa-processed`) will no longer be present on icons that are created using
`fontawesome.icon()`.

If you&apos;ve written and DOM queries that rely on `data-fa-processed` you should get things working again by doing a
simple find and replace.
</description>
            <link>https://maocypher.github.io/assets/bower_components/font-awesome/UPGRADING/</link>
          </item>
        
      
    
      
        
          <item>
            <title>Mouse Wheel ChangeLog</title>
            <description># Mouse Wheel ChangeLog

## 3.1.13

* Update copyright notice and license to remove years
* Create the correct compressed version
* Remove the obsolete jQuery Plugin Registry file

## 3.1.12

* Fix possible 0 value for line height when in delta mode 1

## 3.1.11

* Fix version number for package managers...

## 3.1.10

* Fix issue with calculating line height when using older versions of jQuery
* Add offsetX/Y normalization with setting to turn it off
* Cleans up data on teardown

## 3.1.9

* Fix bower.json file
* Updated how the deltas are adjusted for older mousewheel based events that have deltas that are factors of 120.
* Add $.event.special.mousewheel.settings.adjustOldDeltas (defaults to true) to turn off adjusting of old deltas that are factors of 120. You&apos;d turn this off if you want to be as close to native scrolling as possible.

## 3.1.8

* Even better handling of older browsers that use a wheelDelta based on 120
* And fix version reported by `$.event.special.mousewheel`

## 3.1.7

* Better handle the `deltaMode` values 1 (lines) and 2 (pages)
* Attempt to better handle older browsers that use a wheelDelta based on 120

## 3.1.6

* Deprecating `delta`, `deltaX`, and `deltaY` event handler arguments
* Update actual event object with normalized `deltaX `and `deltaY` values (`event.deltaX`, `event.deltaY`)
* Add `deltaFactor` to the event object (`event.deltaFactor`)
* Handle `&gt; 0` but `&lt; 1` deltas better
* Do not fire the event if `deltaX` and `deltaY` are `0`
* Better handle different devices that give different `lowestDelta` values
* Add `$.event.special.mousewheel.version`
* Some clean up

## 3.1.5

* Bad release because I did not update the new `$.event.special.mousewheel.version`

## 3.1.4

* Always set the `deltaY`
* Add back in the `deltaX` and `deltaY` support for older Firefox versions

## 3.1.3

* Include `MozMousePixelScroll` in the to fix list to avoid inconsistent behavior in older Firefox

## 3.1.2

* Include grunt utilities for development purposes (jshint and uglify)
* Include support for browserify
* Some basic cleaning up

## 3.1.1

* Fix rounding issue with deltas less than zero


## 3.1.0

* Fix Firefox 17+ issues by using new wheel event
* Normalize delta values
* Adds horizontal support for IE 9+ by using new wheel event
* Support AMD loaders


## 3.0.6

* Fix issue with delta being 0 in Firefox


## 3.0.5

* jQuery 1.7 compatibility


## 3.0.4

* Fix IE issue


## 3.0.3

* Added `deltaX` and `deltaY` for horizontal scrolling support (Thanks to Seamus Leahy)


## 3.0.2

* Fixed delta being opposite value in latest Opera
* No longer fix `pageX`, `pageY` for older Mozilla browsers
* Removed browser detection
* Cleaned up the code


## 3.0.1

* Bad release... creating a new release due to plugins.jquery.com issue :(


## 3.0

* Uses new special events API in jQuery 1.2.2+
* You can now treat `mousewheel` as a normal event and use `.bind`, `.unbind` and `.trigger`
* Using jQuery.data API for expandos


## 2.2

* Fixed `pageX`, `pageY`, `clientX` and `clientY` event properties for Mozilla based browsers


## 2.1.1

* Updated to work with jQuery 1.1.3
* Used one instead of bind to do unload event for clean up


## 2.1

* Fixed an issue with the unload handler


## 2.0

* Major reduction in code size and complexity (internals have change a whole lot)


## 1.0

* Fixed Opera issue
* Fixed an issue with children elements that also have a mousewheel handler
* Added ability to handle multiple handlers
</description>
            <link>https://maocypher.github.io/assets/bower_components/jquery-mousewheel/ChangeLog/</link>
          </item>
        
      
    
      
        
          <item>
            <title>Fizzy UI utils</title>
            <description># Fizzy UI utils

UI utility &amp; helper functions

Used in [Flickity](http://flickity.metafizzy.co), [Isotope](http://isotope.metafizzy.co), [Masonry](http://masonry.desandro.com), [Draggabilly](http://draggabilly.desandro.com)

## Install

Bower: `bower install fizzy-ui-utils --save`

npm: `npm install fizzy-ui-utils --save`

## API

``` js
// fizzyUIUtils is the browser global
var utils = fizzyUIUtils;

// ---- ---- //

utils.extend( a, b )
// extend object

utils.modulo( num, div )
// num [modulo] div

utils.makeArray( obj )
// make array from object

utils.removeFrom( ary, obj )
// remove object from array

utils.getParent( elem, selector )
// get parent element of an element, given a selector string

utils.getQueryElement( elem )
// if elem is a string, use it as a selector and return element

Class.prototype.handleEvent = utils.handleEvent;
// enable Class.onclick when element.addEventListener( &apos;click&apos;, this, false )

utils.filterFindElements( elems, selector )
// iterate through elems, filter and find all elements that match selector

utils.debounceMethod( Class, methodName, threhold )
// debounce a class method

utils.docReady( callback )
// trigger callback on document ready

utils.toDashed( str )
// &apos;camelCaseString&apos; -&gt; &apos;camel-case-string&apos;

utils.htmlInit( Class, namespace )
// on document ready, initialize Class on every element
// that matches js-namespace
// pass in JSON options from element&apos;s data-options-namespace attribute
```

---

[MIT license](http://desandro.mit-license.org/). Have at it.

By [Metafizzy](http://metafizzy.co)
</description>
            <link>https://maocypher.github.io/assets/bower_components/fizzy-ui-utils/</link>
          </item>
        
      
    
      
        
          <item>
            <title>@fortawesome/free-regular-svg-icons - SVG with JavaScript version</title>
            <description># @fortawesome/free-regular-svg-icons - SVG with JavaScript version

&gt; &quot;I came here to chew bubblegum and install Font Awesome 5 - and I&apos;m all out of bubblegum&quot;

[![npm](https://img.shields.io/npm/v/@fortawesome/free-regular-svg-icons.svg?style=flat-square)](https://www.npmjs.com/package/@fortawesome/free-regular-svg-icons)

## Installation

```
$ npm i --save @fortawesome/free-regular-svg-icons
```

Or

```
$ yarn add @fortawesome/free-regular-svg-icons
```

## Documentation

Get started [here](https://fontawesome.com/get-started/svg-with-js). Continue your journey [here](https://fontawesome.com/how-to-use/svg-with-js).

Or go straight to the [API documentation](https://fontawesome.com/how-to-use/font-awesome-api).

## Issues and support

Start with [GitHub issues](https://github.com/FortAwesome/Font-Awesome/issues) and ping us on [Twitter](https://twitter.com/fontawesome) if you need to.
</description>
            <link>https://maocypher.github.io/assets/bower_components/font-awesome/advanced-options/use-with-node-js/free-regular-svg-icons/</link>
          </item>
        
      
    
      
        
          <item>
            <title>jQuery Easing Plugin</title>
            <description># jQuery Easing Plugin

What is it? A jQuery plugin from GSGD to give advanced easing options. More info [here](http://gsgd.co.uk/sandbox/jquery/easing)

For CDN please use CloudFlare [`https://cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.4.1/jquery.easing.min.js`](https://cdnjs.cloudflare.com/ajax/libs/jquery-easing/1.4.1/jquery.easing.min.js) to help my host. Thank you.

# AMD or CommonJS usage

```js
// CommonJS
var jQuery = require(&apos;jquery&apos;);
require(&apos;jquery.easing&apos;)(jQuery);

// AMD
define([&apos;jquery&apos;, &apos;jquery.easing&apos;], function (jQuery, easing) {
  easing(jQuery)
})
```

# Building and testing

* Clone the repo
* `npm install`
* Make changes
* Test against files in `/examples`
* Build minified version with `npm run build`
</description>
            <link>https://maocypher.github.io/assets/bower_components/jquery.easing/</link>
          </item>
        
      
    
      
        
          <item>
            <title>jQuery</title>
            <description># jQuery

&gt; jQuery is a fast, small, and feature-rich JavaScript library.

For information on how to get started and how to use jQuery, please see [jQuery&apos;s documentation](http://api.jquery.com/).
For source files and issues, please visit the [jQuery repo](https://github.com/jquery/jquery).

If upgrading, please see the [blog post for 3.3.1](https://blog.jquery.com/2017/03/20/jquery-3.3.1-now-available/). This includes notable differences from the previous version and a more readable changelog.

## Including jQuery

Below are some of the most common ways to include jQuery.

### Browser

#### Script tag

```html
&lt;script src=&quot;https://code.jquery.com/jquery-3.3.1.min.js&quot;&gt;&lt;/script&gt;
```

#### Babel

[Babel](http://babeljs.io/) is a next generation JavaScript compiler. One of the features is the ability to use ES6/ES2015 modules now, even though browsers do not yet support this feature natively.

```js
import $ from &quot;jquery&quot;;
```

#### Browserify/Webpack

There are several ways to use [Browserify](http://browserify.org/) and [Webpack](https://webpack.github.io/). For more information on using these tools, please refer to the corresponding project&apos;s documention. In the script, including jQuery will usually look like this...

```js
var $ = require(&quot;jquery&quot;);
```

#### AMD (Asynchronous Module Definition)

AMD is a module format built for the browser. For more information, we recommend [require.js&apos; documentation](http://requirejs.org/docs/whyamd.html).

```js
define([&quot;jquery&quot;], function($) {

});
```

### Node

To include jQuery in [Node](nodejs.org), first install with npm.

```sh
npm install jquery
```

For jQuery to work in Node, a window with a document is required. Since no such window exists natively in Node, one can be mocked by tools such as [jsdom](https://github.com/tmpvar/jsdom). This can be useful for testing purposes.

```js
require(&quot;jsdom&quot;).env(&quot;&quot;, function(err, window) {
	if (err) {
		console.error(err);
		return;
	}

	var $ = require(&quot;jquery&quot;)(window);
});
```
</description>
            <link>https://maocypher.github.io/assets/bower_components/jquery/</link>
          </item>
        
      
    
      
        
          <item>
            <title>Outlayer</title>
            <description># Outlayer

_Brains and guts of a layout library_

Outlayer is a base layout class for layout libraries like [Isotope](http://isotope.metafizzy.co), [Packery](http://packery.metafizzy.co), and [Masonry](http://masonry.desandro.com)

Outlayer layouts work with a container element and children item elements.

``` html
&lt;div class=&quot;grid&quot;&gt;
  &lt;div class=&quot;item&quot;&gt;&lt;/div&gt;
  &lt;div class=&quot;item&quot;&gt;&lt;/div&gt;
  &lt;div class=&quot;item&quot;&gt;&lt;/div&gt;
  ...
&lt;/div&gt;
```

## Install

Install with [Bower](http://bower.io): `bower install outlayer`

[Install with npm](http://npmjs.org/package/outlayer): `npm install outlayer`

## Outlayer.create()

Create a layout class with `Outlayer.create()`

``` js
var Layout = Outlayer.create( namespace );
// for example
var Masonry = Outlayer.create(&apos;masonry&apos;);
```

+ `namespace` _{String}_ should be camelCased
+ returns `LayoutClass` _{Function}_

Create a new layout class. `namespace` is used for jQuery plugin, and for declarative initialization.

The `Layout` inherits from [`Outlayer.prototype`](docs/outlayer.md).

```
var elem = document.querySelector(&apos;.selector&apos;);
var msnry = new Masonry( elem, {
  // set options...
  columnWidth: 200
});
```

## Item

Layouts work with Items, accessible as `Layout.Item`. See [Item API](docs/item.md).

## Declarative

An Outlayer layout class can be initialized via HTML, by setting an attribute of `data-namespace` on the element. Options are set in JSON. For example:

``` html
&lt;!-- var Masonry = Outlayer.create(&apos;masonry&apos;) --&gt;
&lt;div class=&quot;grid&quot; data-masonry=&apos;{ &quot;itemSelector&quot;: &quot;.item&quot;, &quot;columnWidth&quot;: 200 }&apos;&gt;
  ...
&lt;/div&gt;
```

The declarative attributes and class will be dashed. i.e. `Outlayer.create(&apos;myNiceLayout&apos;)` will use `data-my-nice-layout` as the attribute.

## .data()

Get a layout instance from an element.

```
var myMasonry = Masonry.data( document.querySelector(&apos;.grid&apos;) );
```

## jQuery plugin

The layout class also works as jQuery plugin.

``` js
// create Masonry layout class, namespace will be the jQuery method
var Masonry = Outlayer.create(&apos;masonry&apos;);
// rock some jQuery
$( function() {
  // .masonry() to initialize
  var $grid = $(&apos;.grid&apos;).masonry({
    // options...
  });
  // methods are available by passing a string as first parameter
  $grid.masonry( &apos;reveal&apos;, elems );
});
```

## RequireJS

To use Outlayer with [RequireJS](http://requirejs.org/), you&apos;ll need to set some config.

Set [baseUrl](http://requirejs.org/docs/api.html#config-baseUrl) to bower_components and set a [path config](http://requirejs.org/docs/api.html#config-paths) for all your application code.

``` js
requirejs.config({
  baseUrl: &apos;bower_components&apos;,
  paths: {
    app: &apos;../&apos;
  }
});

requirejs( [ &apos;outlayer/outlayer&apos;, &apos;app/my-component.js&apos; ], function( Outlayer, myComp ) {
  new Outlayer( /*...*/ )
});
```

Or set a path config for all Outlayer dependencies.

``` js
requirejs.config({
  paths: {
    &apos;ev-emitter&apos;: &apos;bower_components/ev-emitter&apos;,
    &apos;get-size&apos;: &apos;bower_components/get-size&apos;,
    &apos;matches-selector&apos;: &apos;bower_components/matches-selector&apos;
  }
});
```

## MIT license

Outlayer is released under the [MIT license](http://desandro.mit-license.org).
</description>
            <link>https://maocypher.github.io/assets/bower_components/outlayer/</link>
          </item>
        
      
    
      
    
      
    

  </channel>
</rss>